python对CSV执行选择、删除数据等各种操作

阿惠碎碎念:晕晕乎乎研究生阶段就已经过了大半年了,文献也没读多少。。。咸鱼呐!要改了。在有限的几次实验操作中,我发现用python对CSV文件执行操作还挺常用的。为了方便自己之后查阅,也方便大家参考,特来整理一下,有些我觉得自己说不清,就举例子啦~后续有新内容再补加。

整理的操作包括最基本的读取、保存、选择特定行或列、删除特定行或列、去掉重复数据等。可能存在不足,欢迎批评指正!

读取文件格式如下
在这里插入图片描述

  • 读取文件数据/ pd.read_csv()
import pandas as pd
#pathname为文件存放位置及文件名称
pathname = 'E:\pycharm\GNRX\data\\train_1.csv' 
#df数据类型为dataframe
df = pd.read_csv(pathname, encoding='gbk')
#显示读取的数据的前5行
print(df.head())
#显示读取的数据的前10行
print(df.head(10))

输出结果如图所示
在这里插入图片描述

  • 去除输出结果中的省略号
pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth', 1000)
  • 读取文件前n行数据/nrows = 1000
    以n=1000为例
df = pd.read_csv(pathname, nrows = 1000,  encoding='gbk') 
  • 指定索引读取数据/index_col = u’时间’
    以时间为索引读取数据
df = pd.read_csv('E:\pycharm\GNRX\data\\train_1.csv', index_col = u'时间',encoding = 'gbk')
  • 读取文件某一个或几个属性/df[‘风速’]、df[].id
import pandas as pd
df = pd.read_csv('E:\pycharm\GNRX\data\\train_1.csv' ,  encoding='gbk') 
#读取“风速”这一列,df['风速']为dataframe类型
print(df['风速'])
#读取这些属性所代表的的列
df[['辐照度','风速','风向','温度','压强','湿度','小时']]

print(df[‘风速’])

输出结果如图所示
在这里插入图片描述
应用举例:以id为例

df[(df[col] < Q1-outlier_step2) | (df[col] > Q3+outlier_step2)].id
  • 将某一属性的值存在一个list中/df[‘风速’].values
    比如将所有风速数据存在一个list中
import pandas as pd
df = pd.read_csv('E:\pycharm\GNRX\data\\train_1.csv' ,  encoding='gbk') 
print(df['风速'].values)

输出结果为
在这里插入图片描述

  • 保存文件/df.to_csv
#filepath为文件保存的位置及文件名,是新创建的文件,不是在原文件上更改
#index=False的含义是保存时不增加新的索引列,没有这句话时新保存的文件会有一列新的索引序号
# sep=','表示使用,分隔需要保存的数据
 df.to_csv(filepath, index=False, sep=',',encoding = 'gbk')
  • 获取某一特征为特定取值的行的索引/df[…].index
    如获取风速为-0.70754717的数据的索引
#index为Excel中从数据行开始计数的序号,从0开始计数
#比如风速= -0.70754717的索引为0,1......
 df[(df['风速'] == -0.70754717 )].index
  • 选择某一特征为特定取值的数据行/df.loc[…]
    比如选择id等于1的数据
print(df.loc[df['id'] == 1])

输出结果为
在这里插入图片描述

其他用法举例:

for i in outlier_list:
      #选择dataframe i 行,col列的值 ,df.loc[i,col]
      time = df.loc[i,'时间']
 #选取“辐照度”的第0-2行数据
  df.loc[0:2,'辐照度'] 
tips = pd.read_csv('E:\pycharm\GNRX\data\\train_1.csv' ,  encoding='gbk')
#计算相关度
result = tips.corr()
print(result)
#只看实际功率与其他属性的相关度,以下两种写法均可
result1 = result.loc['实际功率']
result2 = result.loc['实际功率', :]
  • 用loc指定某一行赋值
#利用索引index循环赋值, MAE_D为之前步骤计算出的数值
for index in dayindex:
      df.loc[index,'MAE_D'] = MAE_D
  • 选择特定的行或者列/iloc
    # 选取第0-2列的整列数据
    df.iloc[:, :2]
    # 选取第2列的整列数据
    df.iloc[:, 2]
    #选取第3列的第0-2行数据
    df.iloc[0:2,3]  

应用举例:

for i in outlier_list:
  df.iloc[:, col][i] = (df.iloc[:, col][i + 1] + df.iloc[:, col][i - 1]) / 2
  • 对某一属性的数据整体做操作再赋值给该属性
    比如风向数据整体-180
df['风向'] = (df['风向']-180)/180
  • 删除特定行/ df.drop(index)
#删除索引为i的整行
 df = df.drop(i)
 #删除实际功率小于等于0的行
 df = df.drop(index=df.loc[(df['实际功率'] <= 0)].index)
  • 删除特定列/df.drop("…", axis=1)
    比如删除“辐照度”这一列
df=df.drop("辐照度", axis=1)
#删除这个列表中的列
df = df.drop(['实际功率','实发辐照度','年','月','日','小时','分钟'], axis=1)
  • 去除重复数据
#去除重复列
columns = df.columns.tolist()
data_train_deal = df[columns].T.drop_duplicates().T
#删除“时间”属性中的重复数据,date1为只包含不重复“时间”属性值的dataframe结构
date1 = df.drop_duplicates(['时间'])
  • 对类似于“2016/4/1 0:15:00”类型的时间数据做处理
 # 把时间先分为日期和每日时间
  date = df['时间'].str.split(' ', 1).str[0]
 date_time = df['时间'].str.split(' ', 1).str[1]
 
  # 再接着分为年月日,小时,分钟
 df['日期'] = df['时间'].str.split(' ', 1).str[0]
 df['年'], df['月'], df['日'] = date.str.split('/').str
 df['时刻'] = df['时间'].str.split(' ', 1).str[1]
 
 # 获得小时,分钟数据
 df['小时'], df['分钟'] = date_time.str.split(':', 1).str
 
 #组合新的时间特征
 df['月日'] = df['月'] + "/" + df['日']
 df['年月'] = df['年'] + "/" + df['月']

以后其他新知识也得好好整理了,边学边整理,不然再回过头从一个一个代码文件中找语句太麻烦了…而且越看越乱,语句太多了,本来想搞个简洁版,现在就委屈各位看官凑合看了…可能给的各个操作的顺序排的不好,有的也有些略微重复,但是语法都没问题的哈~

  • 21
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值