pandas基本操作
介绍一种新的数据格式,csv
- 纯文本,使用某个字符集,比如ASCII、Unicode等;
- 由记录组成,典型的是每行一条记录;
- 每条记录被分隔符分隔为字段;
- 每条记录都有同样的字段序列。
1.读取csv文件:
df = pd.read_csv(r"C:\Users\liujie\Desktop\成绩表.csv")
print(df)
成绩表先在桌面上创建一下,保存时记得选择所有文件格式,编码格式为utf8,这样才能读取成功。不懂看这里:https://blog.csdn.net/weixin_43847614/article/details/90242979
也可以选取行数,比如打印前两行:
print(df.head(2))
2.DataFrame
# 获取所有的列名
print(df.columns)
# 获取索引
print(df.index)
# 查看索引第一个
print(df.loc[0])
3.筛选
#筛选数学成绩大于90的
print(df[df.数学>90])
# 复杂筛选
print(df[(df.数学>80) & (df.语文>80) & (df.英语>80)])
4.排序
print(df.sort_values(['数学','语文','英语']).head())
意思是按数学成绩排序,如果数学成绩相同就按语文排序,依次类推。head参数不填的话默认5个。
5.访问
访问的索引是1,也就是表格的第二位
# 按照索引定位
print(df.loc[1])
如果我们想访问索引1就是表格中第一位怎么访问呢?
这里介绍下索引
创建一个字典:
# 索引
scores = {
'英语':[90,87,87],
'数学':[86,96,96],
'姓名':['wang','li','sun']
}
df = pd.DataFrame(scores, index = ['one','two','three'])
print(df)
可以看到此时的索引已经变成了英文的one two three
如果再以df.loc[1]去访问,会报错
因为此时已经不存在数字索引了,所以不能通过数字索引去访问
print(df.loc['one'])
可以看到,以英文one去访问可以直接访问到表格的第一位
但是这样会比较麻烦,我们并不关心它的索引是多少,我们只想获取到这一条数据就行了,就可用到iloc函数
#实实在在的所谓的第几行
print(df.iloc[0])
这样就可以直接访问到第一条数据
还有ix函数,合并了loc和iloc的功能
# 访问多行
print(df.loc[:2]) #访问前三行
print(df.iloc[:2]) #实实在在的前两行
# 访问某一行,是错误的
# df[0]
# 访问多行数据是可以使用切片的
df[:2]
print(df.values)
可以将所有数据以array的形式打印出来,因此array所有的操作都可以通过df.values操作。
# dataframe中的数组
print(df.数学.values) #可以打印出所有的数学成绩
# 简单的统计
print(df.数学.value_counts()) #统计每个分数的人数
print(df['数学'])
print(df.数学) # 只想获取数学成绩
print(df[['数学','语文']].head()) #想获取多列,此时是个表格,可以用head函数
new = df[['数学','语文']].head()
print(new*2) #可以进行乘法操作
6.重点
def func(score):
if score>=80:
return "优秀"
elif score>=70:
return "良"
elif score>=60:
return "及格"
else:
return "不及格"
df['数学分类'] = df.数学.map(func) #map这个函数可以根据我们现有的数据生成新的一列
print(df.head())
这仅仅是对数学分类,如果想对所有数据进行操作
# applymap对dataframe中所有的数据进行操作的一个函数
print(df.applymap(lambda x:str(x) +'-')) #在所有数据后加个-
这样所有数据后面都会加个-
# apply函数,根据多列生成新的一个列的操作
df['new_score'] = df.apply(lambda x:x.数学 +x.语文, axis=1)
print(df.head(2)) #前几行
print(df.tail(2)) #最后几行
pandas中的dataframe的操作,很大一部分跟numpy中的二维数组的操作是近似的
不一一讲述了