Pandas之csv文件对列行的相关操作

1.Pandas对数据某一列删除

1.删除列
import pandas as pd
df = pd.read_csv(file)
#axis=1就是删除列
df.drop(['列名1','列名2'], axis=1)

2.删除记录,也就是行
import pandas as pd
df = pd.read_csv(file)
#axis=0就是删除记录也就是行
df.drop([0,1,3], axis=0)

2.Pandas之修改列名

1.第一种是没有表头,想要添加表头
因为csv文件是没有表头的,但是默认会把第一行作为表头,而实际上可能第一行就是我们的数据,不能够丢失。
所以要做read_csv函数参数加上header=None,然后再进行保存文件,这样系统就会加上0,1这样的表头了,再次打开,就可以使用rename函数进行表头的更改了。
import pandas as pd
data2 = pd.read_csv('D:/transpond_data_1.csv')
data2.head()
Out:
    0   1
0   mrMzW0lLIA  0
1   mqJrVB2hb6  0
2   m7nJFCgLiK  0
3   mSFZpU8qVB  0
4   mjBQVsjogW  0
上面这个已经是保存后的有表头的文件了,可以看到就是0,1默认。
df = pd.DataFrame(data2)
df = df.rename(columns={'0':'mid_c','1':'num'})
print(df)
Out:
              mid_c  num
0        mrMzW0lLIA    0
1        mqJrVB2hb6    0
2        m7nJFCgLiK    0
3        mSFZpU8qVB    0
4        mjBQVsjogW    0
...             ...  ...
1619147  mdO38FApFD    0
1619148  mNlc2caNpk    0
1619149  mkbybukSaa    0
1619150  mTStAdjFQt    0
1619151  mA3atazmJ6    0
最后再进行保存文件
df = pd.DataFrame(df,columns=['mid_c','num'])
print(df)
df.to_csv('D:\\transpond_data.csv',index=False,encoding='utf-8')
已经改成功了。

2.第二种是有表头直接进行改表头
可以直接打开文件,进行rename函数的使用,最后进行保存,省去了没有表头,进行系统默认添加表头这一步。

3.pandas操作csv多个列,生成新的列

import pandas as pd
df = pd.read_csv(file)
df.eval('new1 = 气温 + 湿度 + PM2P5' , inplace=True)
#inplace这个参数表示是否在原数据上进行操作
这样new1这一列就是通过该文件中的其他几列通过运算得出的新列,直接添加在该文件上。

df.query("age==24")
这样就可以把列age中等于24的选出来了。
#注意:query后面只支持string形式的值,而‘age’==24返回的是一个bool类型,结果不是true就是false,所以需要进行如上操作"age==24",才可返回正确结果

4.pandas去除文件中的重复项

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
  • subset : column label or sequence of labels, optional
    用来指定特定的列,默认所有列
  • keep : {‘first’, ‘last’, False}, default ‘first’
    删除重复项并保留第一次出现的项
  • inplace : boolean, default False
    是直接在原来数据上修改还是保留一个副本
df.drop_duplicates('B','first',inplace = True)
#表示删除B列中重复的项,first保留第一次出现的项,在原数据上进行操作。

5.pandas之拼接函数merge()

  • pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操作,得到一个新的数据集。
  • 用法
DataFrame1.merge(DataFrame2, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(’_x’, ‘_y’))

参数  说明
how 默认为inner,可设为inner/outer/left/right
on  根据某个字段进行连接,必须存在于两个DateFrame中(若未同时存在,则需要分别使用left_on和right_on来设置)
left_on 左连接,以DataFrame1中用作连接键的列
right_on    右连接,以DataFrame2中用作连接键的列
left_index  将DataFrame1行索引用作连接键
right_index 将DataFrame2行索引用作连接键
sort    根据连接键对合并后的数据进行排列,默认为True
suffixes    对两个数据集中出现的重复列,新数据集中加上后缀_x,_y进行区别
  • 用例
#利用字典dict创建数据框
dataDf1=pd.DataFrame({'lkey':['foo','bar','baz','foo'],
                     'value':[1,2,3,4]})
dataDf2=pd.DataFrame({'rkey':['foo','bar','qux','bar'],
                     'value':[5,6,7,8]})
print(dataDf1)
print(dataDf2)
>>>
  lkey  value
0  foo      1
1  bar      2
2  baz      3
3  foo      4

  rkey  value
0  foo      5
1  bar      6
2  qux      7
3  bar      8

#inner链接
dataLfDf=dataDf1.merge(dataDf2, left_on='lkey',right_on='rkey')
>>>
  lkey  value_x rkey  value_y
0  foo        1  foo        5
1  foo        4  foo        5
2  bar        2  bar        6
3  bar        2  bar        8

#Right链接
dataDf1.merge(dataDf2, left_on='lkey', right_on='rkey',how='right')
>>>
  lkey  value_x rkey  value_y
0  foo      1.0  foo        5
1  foo      4.0  foo        5
2  bar      2.0  bar        6
3  bar      2.0  bar        8
4  NaN      NaN  qux        7

#Outer链接
dataDf1.merge(dataDf2, left_on='lkey', right_on='rkey', how='outer')
>>>
  lkey  value_x rkey  value_y
0  foo      1.0  foo      5.0
1  foo      4.0  foo      5.0
2  bar      2.0  bar      6.0
3  bar      2.0  bar      8.0
4  baz      3.0  NaN      NaN
5  NaN      NaN  qux      7.0

原文地址:https://www.cnblogs.com/tsruixi/p/11399226.html

时间: 2024-11-07 01:48:39

Pandas之csv文件对列行的相关操作的相关文章

理解CSV文件以及ABAP中的相关操作

在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separator:两个字段之间的界线,在CSV文件中即是“,”. Delimiter:这种符号的开端和结束,代表了某种东西的界限.举个例子“测试字符串”有两个delimiters,即两个双引号.在很多逗号需要成为文本的情况下,这些CSV文件会使用双引号作为Delimiter. Terminator : 代表片段

Pandas读取csv文件报错UnicodeDecodeError

1.问题描述: 在使用pandas的read_csv的时候,报错,如下,UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 254: unexpected end of data. 经过分析,可能是utf-8不识别该字符,经过各种尝试,找到解决方法. 2.解决办法 找到报错的csv文件,以记事本形式打开 打开后文件,另存为,将文件编码格式由ANSI改为UTF-8,文件类型存为csv这里有一个编码格式. 3.执行

linux下的文件IO缓冲区,及其相关操作

linux下的文件IO操作 浅谈文件IO缓冲 Read()和write()函数在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区与内核缓冲区高速缓存之间复制数据. 当调用write()函数的写入3个字节的时候,由于系统调用与磁盘操作并不同步,在write()函数结束后续某个时刻,内核才会将其缓冲区中的数据写入磁盘.如果在此期间,另一个进程试图读取该文件的这几个字节,那么内核将自动从缓冲区高速缓存中提供这些数据,而不是文件中. 与此同理,对输入而言,内核从磁盘中读取数据并存储到内核缓冲

[解决问题] pandas读取csv文件报错OSError解决方案

python用padans.csv_read函数出现OSError: Initializing from file failed 问题:文件路径中存在中文 解决办法:修改文件路径名为全英文包括文件名 原文地址:https://www.cnblogs.com/liu66blog/p/8494997.html

pandas将csv文件存成文本

参考:1.https://blog.csdn.net/toshibahuai/article/details/79034829 2.https://blog.csdn.net/lanyang123456/article/details/55804982 1.可以利用to_csv方法将csv存为文本格式,并指定分隔符.需要注意的是,在写入后,如报错 ValueError: invalid literal for int() with base 10: '8.0' a = int(val) 改为 a

截取与分析日志文件的特定行数的操作

在进行操作系统和数据库系统管理时经常会遇到在日志文件中查找某个字符或者按照时间截取某个时间段的日志进行分析. 今天早上就遇到一个MySQL数据库上的问题mysql数据库在0-3点的时候数据库会话连接tpscpu和iowait等都比平时大了许多. 为了定位这个时间段内到底发生了那些慢查询消耗了资源就需要在slow.log慢查询日志进行查询截取和分析. 在处理过程中对几种常用的日志截取方法进行了汇总和测试 截取日志段的的方法汇总与测试 方式一 确定时间段的行号使用head和tail命令截取 搜索时间

python读取csv文件并添加索引

对于csv文件进行处理一个重要的步骤是为数据添加索引,方便后续的数据操作,这里我们使用pandas库中的read_csv()函数,在读取csv数据的同时可以对其添加行索引和列索引. import pandas as pd obj=pd.read_csv('testdata.csv') print(obj) read_csv()不对属性进行设置的缺省状态下,对于csv文件进行读取操作后,即使原来的数据存在索引,也会自动添加数字的行索引和列索引. obj=pd.read_csv('testdata.

oracle导出多CSV文件的靠谱的

oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从oracle数据库中导出80w数据到csv文件,如用户给定名字为a.csv(文件最大4000行记录),则自动生产文件为a_1.csv,a_2.csv,...., a_200.csv 我已经实现了一个方法,但80w要导5小时,用户没法接受.如下: sqlplus -s user/pwd @${SqlDir}/

CSV文件导入Mysql出现的乱码等问题 (转载)

将*.csv文件导入mysql可使用LOAD DATA INFILE, 概要写法: Load data in file 具体语法使用可参照:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#load-data 如果一个表中只有英文字符则导入不出现问题,写法也极其简单: LOAD DATA LOCAL INFILE 'D:\\ports.csv' INTO TABLE ports; 遇到的问题一:ports.csv文件中存在中文字符,导入