python pandas练习 (1)
Ex3 - Getting and Knowing your Data(获取然后了解你的数据)
This time we are going to pull data directly from the internet.【这次我们准备直接从互联网下载数据】
Step 1. Import the necessary libraries
【第一步,导入必要的库】
import pandas as pd
Step 2. Import the dataset from this address.
【第二步,从该地址导入数据集】
Step 3. Assign it to a variable called users and use the 'user_id' as index
【第三步,分配(Assign)该数据集至变量users,使用‘user_id作为索引’】
参数解释:
sep:设置分隔符(separator),此处以'|'为分隔符。
index_col:指定数据集中的一列为索引,此处指定'user_id'列为索引
users = pd.read_csv('https://raw.githubusercontent.com/justmarkham/DAT8/master/data/u.user',
sep='|', index_col='user_id')
Step 4. See the first 25 entries
【第四步,查看前25个条目(entries)】
使用DataFrame的head函数,参数为要查看的条目数。
users.head(25)
age | gender | occupation | zip_code | |
---|---|---|---|---|
user_id | ||||
1 | 24 | M | technician | 85711 |
2 | 53 | F | other | 94043 |
3 | 23 | M | writer | 32067 |
4 | 24 | M | technician | 43537 |
5 | 33 | F | other | 15213 |
6 | 42 | M | executive | 98101 |
7 | 57 | M | administrator | 91344 |
8 | 36 | M | administrator | 05201 |
9 | 29 | M | student | 01002 |
10 | 53 | M | lawyer | 90703 |
11 | 39 | F | other | 30329 |
12 | 28 | F | other | 06405 |
13 | 47 | M | educator | 29206 |
14 | 45 | M | scientist | 55106 |
15 | 49 | F | educator | 97301 |
16 | 21 | M | entertainment | 10309 |
17 | 30 | M | programmer | 06355 |
18 | 35 | F | other | 37212 |
19 | 40 | M | librarian | 02138 |
20 | 42 | F | homemaker | 95660 |
21 | 26 | M | writer | 30068 |
22 | 25 | M | writer | 40206 |
23 | 30 | F | artist | 48197 |
24 | 21 | F | artist | 94533 |
25 | 39 | M | engineer | 55107 |
Step 5. See the last 10 entries
【第五步,查看最后10个条目】
使用DataFrame的tail函数,和head函数相似。
users.tail(10)
age | gender | occupation | zip_code | |
---|---|---|---|---|
user_id | ||||
934 | 61 | M | engineer | 22902 |
935 | 42 | M | doctor | 66221 |
936 | 24 | M | other | 32789 |
937 | 48 | M | educator | 98072 |
938 | 38 | F | technician | 55038 |
939 | 26 | F | student | 33319 |
940 | 32 | M | administrator | 02215 |
941 | 20 | M | student | 97229 |
942 | 48 | F | librarian | 78209 |
943 | 22 | M | student | 77841 |
Step 6. What is the number of observations in the dataset?
【第六步,这些数据的观测值(number of observations)是多少?】
使用DataFrame的shape函数可以查看DataFrame的行数和列数,返回值是一个元组。
其中shape[0]只查看行数,shape[1]只查看列数。
users.shape[0]
943
Step 7. What is the number of columns in the dataset?
【第七步,该数据集有多少个列】
同样使用shape函数,shape[1]表示只查看列数。
users.shape[1]
4
Step 8. Print the name of all the columns.
【第八步,打印出所有列的列名。】
直接使用DataFrame的columns函数,可以查看所有列的信息。
users.columns
Index(['age', 'gender', 'occupation', 'zip_code'], dtype='object')
Step 9. How is the dataset indexed?
【第九步,该数据集是如何索引的?】
使用DataFrame的index函数,查看索引信息。
# "the index" (aka "the labels")
# 【索引,又被称为标签】
users.index
Step 10. What is the data type of each column?
【第十步,每一列的数据类型是什么?】
直接使用DataFrame的dtypes函数,查看所有列的数据类型。
users.dtypes
age int64
gender object
occupation object
zip_code object
dtype: object
Step 11. Print only the occupation column
【第十一步,仅打印'occupation'(职业)列的信息】
users.occupation
#or
users['occupation']
user_id
1 technician
2 other
3 writer
4 technician
5 other
...
939 student
940 administrator
941 student
942 librarian
943 student
Name: occupation, Length: 943, dtype: object
Step 12. How many different occupations are in this dataset?
【第十二步,该数据集中有多少个不同的职业?】
使用DataFrame中的nunique函数返回指定列的唯一值个数。
或者使用value_counts()函数返回每个唯一元素的计数信息,再使用count()函数,得到唯一值的个数。
users.occupation.nunique()
#or by using value_counts() which returns the count of unique elements
#users.occupation.value_counts().count()
21
Step 13. What is the most frequent occupation?
【第十三步,最频繁出现的职业是哪个?】
使用value_counts().head(1)来获取出现频率最多的职业信息,返回一个包含名称和数量的Series。
之后使用index[0]函数来完成只获取名称的操作。
#Because "most" is asked
users.occupation.value_counts().head(1).index[0]
#or
#to have the top 5
# users.occupation.value_counts().head()
'student'
Step 14. Summarize the DataFrame.
【第十四步,概括这个DataFrame。】
使用DataFrame中的describe()函数,返回该DataFrame的描述性统计信息(Descriptive statistics)。
默认只返回数字类型的列的信息。
users.describe() #Notice: by default, only the numeric columns are returned.
age | |
---|---|
count | 943.000000 |
mean | 34.051962 |
std | 12.192740 |
min | 7.000000 |
25% | 25.000000 |
50% | 31.000000 |
75% | 43.000000 |
max | 73.000000 |
Step 15. Summarize all the columns
【第十五步,概括所有的列。】
在describe()函数中增加参数(include = "all")即可。
users.describe(include = "all") #Notice: By default, only the numeric columns are returned.
age | gender | occupation | zip_code | |
---|---|---|---|---|
count | 943.000000 | 943 | 943 | 943 |
unique | NaN | 2 | 21 | 795 |
top | NaN | M | student | 55414 |
freq | NaN | 670 | 196 | 9 |
mean | 34.051962 | NaN | NaN | NaN |
std | 12.192740 | NaN | NaN | NaN |
min | 7.000000 | NaN | NaN | NaN |
25% | 25.000000 | NaN | NaN | NaN |
50% | 31.000000 | NaN | NaN | NaN |
75% | 43.000000 | NaN | NaN | NaN |
max | 73.000000 | NaN | NaN | NaN |
Step 16. Summarize only the occupation column
【第十六步,仅概括occupation(职业)这一列的信息。】
users.occupation.describe()
count 943
unique 21
top student
freq 196
Name: occupation, dtype: object
Step 17. What is the mean age of users?
【第十七步,age(年龄)的平均数是多少?】
使用mean()函数返回指定列的平均值。
使用round()函数,对浮点数进行近似取值,若只传一个参数,则只保留整数。
round(users.age.mean())
34
Step 18. What is the age with least occurrence?
【第18步,出现最少的年龄是多少?】
首先使用DataFrame的value_counts()函数获取各个年龄的出现频率,之后使用tail()函数来获取最后的几行(默认最后5行)。
users.age.value_counts().tail() #7, 10, 11, 66 and 73 years -> only 1 occurrence
7 1
66 1
11 1
10 1
73 1
Name: age, dtype: int64