pandas读取和写入csv文件

pandas.read_csv()语法:

读取csv/txt/tsv文件,返回一个DataFrame类型的对象。
# 在读取的时候,默认会将第一行记录当成标题。如果没有标题,我们可以指定header=None。
# read_csv默认使用逗号作为分隔符,我们可以使用sep或delimiter来指定分隔符。
# 注意使用/修改为同一类型编码,否则会乱码
# 案例:
 

import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
print(np.__version__)
print(pd.__version__)
 
df = pd.read_csv(r"student.csv", header = None, sep=",",encoding="utf-8")   #header = None,默认列名=0,1,2,3,...
df1 = pd.read_csv(r"student.csv", header = None,names=["id","name","sex","age","grade"], sep=",") #自定义列名
df2 = pd.read_csv(r"student.csv",header = None,index_col=None, sep=",") #默认自行生成行索引0,1,...
df3 = pd.read_csv(r"student.csv",header = None,index_col=[0], sep=",") #指定第1列作为行索引
df4 = pd.read_csv(r"student.csv",header=None,names=["id","name","sex","age","grade"],index_col=["name"], sep=",")  #指定name列作为行索引
df5 = pd.read_csv(r"student.csv",header=None,usecols=[1,2,3],names=["name", "sex", "age"],index_col=0,sep=",")   #指定列
display(df.head(3), df1.head(3), df2.head(3), df3.head(3), df4.head(3), df5.head(3))

1、使用pandas读取csv文件的全部数据:pd.read_csv("filepath",[encoding='编码'])

 如果存在编码(乱码)问题:

(1)用记事本打开csv文件,另存为,编码格式改为utf-8然后用utf-8读取文件。

(2)用 csv编码的 “GB18030” 解码方式读取文件。

另外,由于python不支持中文,故一般在所有python代码开头第一行加上#coding=utf-8 
 

In [1]: import numpy as np
In [2]: import pandas as pd
 
In [3]: df = pd.read_csv("E:\student.csv")
 
In [4]: print(df)
    95002   刘晨  女  19  IS
0   95017  王风娟  女  18  IS
1   95018   王一  女  19  IS
...
20  95016   钱国  男  21  MA
 
In [5]: df = pd.read_csv("E:\student.csv",encoding='utf-8')
 
In [6]: print(df)
    95002   刘晨  女  19  IS
0   95017  王风娟  女  18  IS
1   95018   王一  女  19  IS
...
20  95016   钱国  男  21  MA

细心观察数据,发现默认的他将我们的第一行数据当作是每个字段的标题啦。

(1)打开csv文件(为了避免编码问题,最好使用Notepad++打开编写修改),在第一行添加每列(columns)数据的标题。

In [1]: import numpy as np
In [2]: import pandas as pd
 
In [36]: df = pd.read_csv("e:\student.csv",encoding='utf-8')
 
In [37]: print(df)
     编码   姓名 性别  年龄  班级
0   95002   刘晨  女  19  IS
1   95017  王风娟  女  18  IS
2   95018   王一  女  19  IS

仔细观察数据,很多时候我们需要的字段并不是那么多,现在我不想看到年龄的字段。 

 2、使用pandas读取csv文件的指定列方法:pd.read_csv("filepath",usecols=[0,1,2,...],[encoding='编码'])

In [1]: import numpy as np
In [2]: import pandas as pd
In [40]: df = pd.read_csv("e:\student.csv",usecols=['姓名','班级'],encoding='utf-8')
In [41]: print(df)
     姓名  班级
0    刘晨  IS
1   王风娟  IS
2    王一  IS
...
In [1]: import numpy as np
In [2]: import pandas as pd
In [38]: df = pd.read_csv("e:\student.csv",usecols=[0,1,2,4],encoding='utf-8')
In [39]: print(df)
    编码   姓名 性别  班级
0   95002   刘晨  女  IS
1   95017  王风娟  女  IS

 3、使用pandas读取csv文件的指定行方法:pd.read_csv("filepath",[skiprows=n],nrows=m,[encoding='编码'])

pd.read_csv(路径,skiprows=n,nrows=m),忽略前n行,往下读m行

In [1]: import numpy as np
In [2]: import pandas as pd
In [47]: df = pd.read_csv("e:\student.csv",skiprows=5,nrows=2,encoding='utf-8')
 
In [48]: print(df)
   95014  王小丽  女  19  CS
0  95019  邢小丽  女  19  IS
1  95020   赵钱  男  21  IS

 4、使用pandas写入CSV文件 df.to_csv(path_or_buf,[sep=’,’, na_rep=”, ....])

写入csv文件是最常用的,csv文件默认用’,’作为分隔符。

df.to_csv(path_or_buf=None, sep=’,’, na_rep=”, float_format=None, columns=None, header=True, index=True, index_label=None, mode=’w’, encoding=None)
参数说明:

path_or_buf:文件名、文件具体、相对路径、文件流等
sep:文件分割符号,to_csv()的sep默认为’,’,可指定任意字符作为分隔符
na_rep:将NaN转换为特定值。写入时NaN会被表示为空字符串,我们可能希望用其他值代替,如:‘- ’、‘/’、'NULL' 等
columns:选择部分列写入。保留部分列且按列排序,columns=['B列列名','A列列名']
header:忽略列名,header=None 不写入列名 
index:index=False 表示选择不写入索引
案例:

pandas读取一个csv文件,将指定内容存入新的csv文件

In [1]: import numpy as np
In [2]: import pandas as pd
 
In [3]: df = pd.read_csv("e:\student.csv")
In [4]: print(df)
       编码   姓名 性别  年龄  班级
0   95002   刘晨  女  19  IS
1   95017  王风娟  女  18  IS
2   95018   王一  女  19  IS
 
In [5]: df.to_csv("e:\student01.csv",sep=",",columns=['姓名','班级'],index=True)
In [6]: df = pd.read_csv('e:\student01.csv')
In [7]: print(df)
    Unnamed: 0   姓名  班级
0            0   刘晨  IS
1            1  王风娟  IS
2            2   王一  IS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值