DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。
说到表格, 你可以把DataFrame想象成一个excel表格,或者一张sql表, 它是pandas使用频率最高的一种数据结构, 掌握了DataFrame才算是真正的掌握了pandas
创建一个DataFrame的方式可谓是多种多样,五花八门,下面罗列出常用的创建DataFrame方法
import pandas as pd
df = pd.DataFrame()
print(df)
程序输出结果
Empty DataFrame
Columns: []
Index: []
先看例子,再解释具体方法
import pandas as pd
data = {
'语文': [90, 98, 87, 90],
'数学': [92, 87, 90, 98]
}
df = pd.DataFrame(data)
print(df)
df的内容为
语文 数学
0 90 92
1 98 87
2 87 90
3 90 98
前面提到过,你可以把dataframe理解为一张excel表格,如此一来,语文,数学就算是表格的标题, 在DataFrame中,他们是列索引。接下来是4行数据, 0,1,2,3,是行索引。 显然,现在还缺少名字这一列,我们可以把名字单独作为一列,也可以把名字设置为索引, 自需要修改一行代码就可以实现这个目标
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df的内容变为
语文 数学
小明 90 92
小红 98 87
小刚 87 90
小丽 90 98
为什么说pandas是做数据分析的利器呢,因为使用它分析数据是在是太方便了,现在,我就来演示一下使用pandas做数据分析,我设置以下几个数据分析的目标
代码实现如下
import pandas as pd
data = {
'语文': [90, 98, 87, 90],
'数学': [92, 87, 90, 98]
}
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
yuwen_series = df['语文']
max_yuwen = yuwen_series.max() # 语文最高分
print('语文最高分{max_score}'.format(max_score=max_yuwen))
# 创建出总分列, 由每一行的语文和数学分数相加
df['总分'] = df['语文'] + df['数学']
max_sum = df['总分'].max()
stu_name = df['总分'].idxmax()
print('{stu}总分最高, {score}'.format(stu=stu_name, score=max_sum))
输出结果
语文最高分98
小丽总分最高, 188
关于代码,有几处需要做一些解释
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
print(df)
数据和1.2小节中的一样,只是换了一种存储方式,在列表里, 有4个字典,每个字典有两个key-value对,df的输出结果与之前一样
数学 语文
小明 92 90
小红 87 98
小刚 90 87
小丽 98 90
除了可以指定index以外,还可以指定所需要的列, 比如,你只想创建一个有语文的DataFrame, 那么可以这样写
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'], columns=['语文'])
指定columns参数, 最终df的内容是
语文
小明 90
小红 98
小刚 87
小丽 90
import pandas as pd
data = {
'语文': pd.Series([90, 98, 87], index=['小明', '小红', '小刚']),
'数学': pd.Series([92, 87, 90, 98], index=['小明', '小红', '小刚', '小丽'])
}
df = pd.DataFrame(data)
print(df)
和1.2小节的方法类似,不过这次字典里的value变成了series类型,数据中缺失了小丽的语文分数,最终df输出结果是
语文 数学
小丽 NaN 98
小刚 87.0 90
小明 90.0 92
小红 98.0 87
缺失的数值用np.nan填充
可以根据一个已经存在的DataFrame创建出一个新的DataFrame
import pandas as pd
data = {
'语文': pd.Series([90, 98, 87], index=['小明', '小红', '小刚']),
'数学': pd.Series([92, 87, 90, 98], index=['小明', '小红', '小刚', '小丽'])
}
df = pd.DataFrame(data)
df_2 = pd.DataFrame(df, index=['小明', '小红', '小刚'])
print(df_2)
创建df_2时,我指定了3个索引, 这样,就去掉了小丽的数据, 最终的结果是
语文 数学
小明 90.0 92
小红 98.0 87
小刚 87.0 90
QQ交流群: 211426309