目录
测试代码使用的csv文件内容如下:
读取csv、excel文件
import pandas as pd
df=pd.read_csv(r'C:\Users\JM1307\Desktop\2015_09.csv')
df.to_csv(r'E:\2016.csv',index=False)
【对Excel文件的操作参考我的这篇博客】
根据特定条件选取dataframe特定的数据部分
loc、iloc这两个函数都是用来选取dataframe特定的数据区域,具体的区别在代码中有解释。
设置选取条件:
df.loc[ 行的选取条件,列的选取条件 ]
我们还可以改这些位置上的数据,而且这样是直接改了原df:
df.loc[ 行的选取条件,列的选取条件 ] = 值
#这里行选取的条件是用的df['Vessel1']==10583这种方式(用Vessel1这列值等于10583选取行),列直接用列名WeightNew来选,并把相应WeightNew值改为9999
df.loc[df['Vessel1']==10583,'WeightNew']=9999
df.loc[(df['Vessel1']>=10583) & (df['Vessel2']<=14699),'WeightNew'] #可以加多个筛选条件,用&,|来连接
#如果要选取多列,就把这些列用()括起来,要改成多少,用列表括起来
df.loc[0,('Vessel1','Vessel2','Familiarity')]=[123,456,7.8]
#如果用数字来索引行/列,可以用:分号来选取多行/列,区间是左闭右开,但是这种纯数字索引的,需要用iloc,尤其是列的索引如果用数字的话
#上边那行虽然看起来loc行索引用了0,但是那是因为df默认就是有0到n-1的行索引嘿嘿~
#所以loc是按标签选取数据,iloc是按位置选取数据
df.iloc[0:3,4:]=[[999,888,777],[666,555,444],[333,222,111]]
# 0:3换成[0,1,2]也可以,那个冒号本质上就是形成了列表
df.iloc[[0,1,2],4:]=[[999,888,777],[666,555,444],[333,222,111]]
遍历dataframe的每一行
for index,row in df.iterrows():
print(row['SSR'],row['Weight'])
只要dataframe的某几列
## 以两列为例
df[['Vessel1','Vessel2']] #方法1
df.loc[:,('Vessel1','Vessel2')] #方法2
统计相同的行的数量
print(df.values) #输出的是所有行的记录,一整行是一个value
print(df.value_counts()) #每种value(一行)的个数
print(df[['SSR','Weight']].value_counts()) #每种value(两列是一行)的个数
print(df.loc[:,('SSR','Weight')].value_counts()) #同上
创建空的dataframe,添加数据,保存成csv
import pandas as pd
import numpy as np
## 创建一个空的dataframe,有三列,分别是Vessel1、Vessel2、Weight_Predict
df=pd.DataFrame(data=None,columns=['Vessel1','Vessel2','Weight_Predict'])
for i in range(10): #循环往空白dataframe里写10次数据,写10行
df.loc[i]=[123,456,i] #用loc函数来添加数据,[123,456,i]对应那三列的值
###或者用append来追加数据也可以,必须要加ignore_index=True
#切记,append方法会返回新的dataframe,所以要保留返回值!!!(loc是修改原数据本身)
df=df.append({'Vessel1':8959,'Vessel2':6756,'Weight_Predict':3.255},ignore_index=True)
df.to_csv(r'E:\2016.csv',index=False) #这里一定要设置index=False,不然会出问题,影响到loc的那个索引
将列表存成csv文件
df_node=pd.DataFrame({'node':nodeList}) #以字典的这种方式传入列表
df_node.to_csv(r'E:\node.csv',sep=',',index=False)
求某一列的和、均值、最大值、最小值
df['Weight'].sum()
df['Weight'].mean()
df['Weight'].max()
df['Weight'].min()
查看某一列/所有列的类型
print(df['Vessel1'].dtype)
print(df.dtypes) #输出所有列的数据类型
修改某一列的类型
df['Vessel1']=df['Vessel1'].astype(int) #将原类型修改为int
让pycharm输出全部数据,去掉省略号
pd.set_option('display.max_rows',None)
pd.set_option('display.max_columns',None)
dataframe保存成csv时,中文出现乱码
#将编码方式设置为 utf_8_sig 即可
df.to_csv(r'C:\Users\JM1307\Desktop\1.csv',index=False,encoding='utf_8_sig')
删除dataframe的行、列
【注:自己手动删除文件里的行或列,会破坏这个文件,不要手动删】
【drop函数不改变原来的dataframe,所以要保留一下返回值】
#删除行
## df.drop([行号列表],axis=0)
df1=df.drop([0,4],axis=0) #删除第0行和第4行
df2=df.drop(range(11),axis=0) #删除前11行
#删除列
## df.drop([列名],axis=0)
df3=df.drop(['Vessel1','Vessel2'],axis=1) #删除vessel1和vessel2这两列
判断dataframe是否为空
【用len函数计算长度,间接判断是否为空】
if len(df)==0:
print("空表")
if len(df.loc[df['Vessel1']==8959,:])!=0:
print("有8959这条船的数据,非空")
持续更新中……