2019-10-21

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

你可能感兴趣的:(2019-10-21)