df = pd.read_csv(Location, header=None)
df
0 | 1 | |
---|---|---|
0 | Bob | 968 |
1 | Jessica | 155 |
2 | Mary | 77 |
3 | John | 578 |
4 | Mel | 973 |
如果我们需要为每一列指定一个名字,我们可以传入另外一个参数 names,同时去掉 header 这个参数。
df = pd.read_csv(Location, names=['Names', 'Births'])
df
Names | Births | |
---|---|---|
0 | Bob | 968 |
1 | Jessica | 155 |
2 | Mary | 77 |
3 | John | 578 |
4 | Mel | 973 |
你可以把数字 [0,1,2,3,4] 设想为 Excel 文件中的行标 (row number)。 在 pandas 中,这些是 索引 (index) 的一部分。 你可以把索引(index)理解为一个sql表中的主键(primary key),但是索引(index)是可以重复的。
[Names, Births] 是列名,和sql表或者Excel数据表中的列名(column header)是类似的。
现在可以把这个 csv 文件删除了。
import os
os.remove(Location)
准备数据
我们的数据包含了1880年出生的婴儿及其数量。 我们已经知道我们有5条记录而且没有缺失值(所有值都是非空 non-null 的)。
Names 列是由字母和数字串组成的婴儿名字。 这一列也许会出现一些脏数据但我们现在不需要有太多顾虑。 Births 列应该是通过整型数字(integers)表示一个指定年份指定婴儿名字的出生率。 我们可以检查一下是否这一列的数字都是整型。这一列出现浮点型(float)是没有意义的。但我们不需要担心这一列出现任何可能的离群值(outlier)。
请注意在目前这个阶段,简单地看一下dataframe中的数据来检查"Names"列已经足够了。 在之后我们做数据分析的过程中,我们还有很多机会来发现数据中的问题。
# 查看每一列的数据类型
df.dtypes
Names object
Births int64
dtype: object
# 查看 Births 列的数据类型
df.Births.dtype
dtype('int64')
你看到 Births 列的数据类型是 inter64,这意味着不会有浮点型(小数)或者字符串型出现在这列中。
分析数据
要找到最高出生率的婴儿名或者是最热门的婴儿名字,我们可以这么做。
- 将 dataframe 排序并且找到第一行
- 使用 max() 属性找到最大值
# 方法 1:
Sorted = df.sort_values(['Births'], ascending=False)
Sorted.head(1)
Names | Births | |
---|---|---|
4 | Mel | 973 |
# 方法 2:
df['Births'].max()
973
表现数据
我们可以将 Births 这一列标记在图形上向用户展示数值最大的点。 对照数据表,用户就会有一个非常直观的画面 Mel 是这组数据中最热门的婴儿名字。
pandas 使用非常方便的 plot() 让你用 dataframe 中的数据来轻松制图。 刚才我们在 Births 列找到了最大值,现在我们要找到 973 这个值对应的婴儿名字。
每一部分的解释:
df['Names'] - 这是完整的婴儿名字的列表,完整的 Names 列
df['Births'] - 这是1880年的出生率,完整的 Births 列
df['Births'].max() - 这是 Births 列中的最大值
[df['Births'] == df['Births'].max()]
的意思是 [在 Births 列中找到值是 973 的所有记录]
df['Names'][df['Births'] == df['Births'].max()]
的意思是 在 Names 列中挑选出 [Births 列的值等于 973] (Select all of the records in the Names column WHERE [The Births column is equal to 973])
一个另外的方法是我们用过 排序过的 dataframe: Sorted['Names'].head(1).value
str() 可以将一个对象转换为字符串。
# 绘图
# df['Births'].plot()
df['Births'].plot.bar() #这里改用的条形图更直观
# Births 中的最大值
MaxValue = df['Births'].max()
# 找到对应的 Names 值
MaxName = df['Names'][df['Births'] == df['Births'].max()].values
# 准备要显示的文本
Text = str(MaxValue) + " - " + MaxName
# 将文本显示在图形中
plt.annotate(Text, xy=(1, MaxValue), xytext=(8, 0),
xycoords=('axes fraction', 'data'), textcoords='offset points')
print("The most popular name")
df[df['Births'] == df['Births'].max()]
#Sorted.head(1) can also be used
The most popular name
Names | Births | |
---|---|---|
4 | Mel | 973 |