python-pandas-读取与写入文件

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
from numpy import nan as NA
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

读取csv

# pd.read_csv() 默认 逗号为分隔符 ,默认首行作为 columnsName
pd.read_csv('data/ex1.csv')
a	b	c	d	message
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	foo
# pd..read_table()也可以读取,但是要指定分隔符参数sep=''
pd.read_table('data/ex1.csv',sep=',')
a	b	c	d	message
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	foo
# 读取没有明显列名称的文件,不需要让首行作为列,用参数header=None
df2=pd.read_csv('data/ex2.csv',header=None)
df2
0	1	2	3	4
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	foo
# 自d义列名称读取 参数names=[]
# names给几列,就会从最后向前读几列数据,剩下的都是index
# 超出就是nan
df3=pd.read_csv('data/ex2.csv',names=['aa','bb','cc','dd','message','nn'])
df3
aa	bb	cc	dd	message	nn
0	1	2	3	4	hello	NaN
1	5	6	7	8	world	NaN
2	9	10	11	12	foo	NaN
# 设置行索引 index_col='某个列name'
df4=pd.read_csv('data/ex2.csv',
                names=['aa','bb','cc','dd','message'],
               index_col='message'
               )
df4
aa	bb	cc	dd
message				
hello	1	2	3	4
world	5	6	7	8
foo	9	10	11	12
# 多列的值作为行索引
df5=pd.read_csv('data/csv_mindex.csv',
               index_col=['key1','key2']
               )
df5
value1	value2
key1	key2		
one	a	1	2
b	3	4
c	5	6
d	7	8
two	a	9	10
b	11	12
c	13	14
d	15	16
# 读取不规则的分隔符数据,使用分隔符sep=''
# 使用正则表达式做分隔符,不需要导入re,直接写正则字符串
# \s+
df6=pd.read_csv('data/ex3.txt',sep='\s+')
df6
A	B	C
aaa	-0.264438	-1.026059	-0.619500
bbb	0.927272	0.302904	-0.032399
ccc	-0.264273	-0.386314	-0.217601
ddd	-0.871858	-0.348382	1.100491
# 使用参数skiprows=[] 跳过一些行
df7=pd.read_csv('data/ex4.csv',skiprows=[0,2,3])
df7
a	b	c	d	message
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	foo
# comment='#',指定#开头的注释,不用读取
pd.read_csv('data/ex4.csv',comment='#')
a	b	c	d	message
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	foo
# 需要读取xxx值为nan,参数na_values=[],空值与NA字符默认是nan了
df8=pd.read_csv('data/ex5.csv',na_values=[1,2,'world'])
df8
something	a	b	c	d	message
0	one	NaN	NaN	3.0	4	NaN
1	two	5.0	6.0	NaN	8	NaN
2	three	9.0	10.0	11.0	12	foo
3	foo	NaN	NaN	11.0	12	two
# 指定不同列的不同数据为nan
# 用字典匹配,某个列的一个值或多个值
nans={'something':'two','message':['foo','world']}
df9=pd.read_csv('data/ex5.csv',na_values=nans)
df9
something	a	b	c	d	message
0	one	1	2	3.0	4	NaN
1	NaN	5	6	NaN	8	NaN
2	three	9	10	11.0	12	NaN
3	foo	1	2	11.0	12	two

写入csv

# 模拟创建一个成绩表,语文,数学,英语。各科成绩有重复。
names = '尺,寸,人,下,匕,卜,之,田,丫,乃,贝,井,工,几,女,巨,爪,火,了,方,木,中,寸,石,户,友,夫,不,可,主,又,丑,巾,口,电,门,术,儿,羊,丁,心,天,化,气,正,页,兄,伏,大,计'.split(',')
df10 = DataFrame(
    {
        '语文':np.random.randint(90,100,50),
        '数学':np.random.randint(80,100,50),
        '英语':np.random.randint(60,100,50),
        '化学':np.random.randint(60,100,50),
        '物理':np.random.randint(60,100,50),
        '生物':np.random.randint(60,100,50),
        '政治':np.random.randint(60,100,50),
        '历史':np.random.randint(60,100,50),
        '地理':np.random.randint(60,100,50)
    },
    index = [np.random.choice(list('赵钱孙李周吴郑王'))+names.pop(np.random.randint(0,len(names))) for i in range(50)]
)
df10
语文	数学	英语	化学	物理	生物	政治	历史	地理
赵大	97	90	68	86	73	94	70	70	72
孙兄	91	99	86	89	68	96	70	82	60
钱术	95	87	87	67	99	88	85	65	95
吴羊	92	98	94	64	96	82	65	85	69
王女	91	84	84	88	92	75	82	97	91
王卜	94	89	90	99	95	99	67	82	82
王可	94	90	76	68	93	82	93	99	83
钱巾	97	85	92	81	71	85	90	60	65
李丁	90	94	86	71	90	98	60	87	75
吴丫	91	82	70	70	86	68	61	94	99
吴丑	91	97	78	79	82	95	83	80	92
钱火	97	97	72	99	66	67	80	80	73
王石	96	83	69	66	90	60	86	93	92
李人	91	95	60	96	99	94	69	64	89
郑正	90	84	82	62	67	82	88	71	65
王乃	93	96	60	79	86	95	89	61	65
李寸	94	91	62	71	77	88	61	94	87
郑之	96	97	96	74	70	70	72	78	73
钱口	96	80	98	69	70	66	73	70	69
孙寸	96	81	70	97	74	92	64	94	87
吴儿	98	85	71	96	72	83	61	97	98
李木	94	82	69	71	88	92	93	92	76
赵主	95	80	83	80	63	94	76	67	75
钱巨	93	96	98	72	80	84	86	98	96
郑电	99	95	63	97	98	92	60	90	79
赵工	99	86	60	83	86	97	80	98	80
李方	91	83	85	75	76	85	74	87	76
李门	90	89	64	76	75	89	75	76	72
李几	96	82	70	88	79	96	60	85	61
赵夫	94	94	68	98	95	85	65	98	63
吴井	92	89	86	79	78	68	98	78	73
郑天	91	85	97	84	64	93	90	97	93
孙计	96	84	74	91	85	64	69	64	66
郑尺	99	84	93	88	99	87	76	80	85
孙友	98	95	75	85	94	89	69	74	82
郑中	96	81	88	66	68	71	88	83	63
赵页	98	97	63	66	71	98	97	63	60
郑户	91	88	68	73	76	81	87	87	89
王了	95	83	64	94	89	71	96	85	76
赵爪	92	92	88	83	81	98	81	97	63
吴又	99	99	71	61	90	60	65	74	77
钱化	93	92	63	82	86	82	88	96	88
吴不	94	83	75	90	71	91	84	99	83
吴伏	91	84	66	93	62	88	78	81	68
王贝	92	93	75	86	70	84	84	84	64
李气	97	99	72	60	69	68	67	74	75
李田	91	90	84	71	79	80	91	65	66
李下	98	81	65	92	72	65	72	64	77
李匕	90	82	96	99	87	88	88	64	95
李心	99	97	87	72	71	63	98	75	78
# 保存,行列索引都存进去了
df10.to_csv('成绩.csv',encoding='utf-8')
# index=False 不要行索引
df10.to_csv('成绩1.csv',index=False)
# header=False 不要行索引
df10.to_csv('成绩2.csv',header=False)
# na_rep='' 将nan换成xx进行存储,默认是空
df10.iloc[0,3]=NA
df10.to_csv('成绩3.csv',na_rep='空')
# 预览存储效果
import sys
# 以竖线为分隔符的预览效果
df10.to_csv(sys.stdout,sep='|',na_rep='空空')
|语文|数学|英语|化学|物理|生物|政治|历史|地理
赵大|97|90|68|空空|73|94|70|70|72
孙兄|91|99|86|89.0|68|96|70|82|60
钱术|95|87|87|67.0|99|88|85|65|95
吴羊|92|98|94|64.0|96|82|65|85|69
王女|91|84|84|88.0|92|75|82|97|91
王卜|94|89|90|99.0|95|99|67|82|82
王可|94|90|76|68.0|93|82|93|99|83
钱巾|97|85|92|81.0|71|85|90|60|65
李丁|90|94|86|71.0|90|98|60|87|75
吴丫|91|82|70|70.0|86|68|61|94|99
吴丑|91|97|78|79.0|82|95|83|80|92
钱火|97|97|72|99.0|66|67|80|80|73
王石|96|83|69|66.0|90|60|86|93|92
李人|91|95|60|96.0|99|94|69|64|89
郑正|90|84|82|62.0|67|82|88|71|65
王乃|93|96|60|79.0|86|95|89|61|65
李寸|94|91|62|71.0|77|88|61|94|87
郑之|96|97|96|74.0|70|70|72|78|73
钱口|96|80|98|69.0|70|66|73|70|69
孙寸|96|81|70|97.0|74|92|64|94|87
吴儿|98|85|71|96.0|72|83|61|97|98
李木|94|82|69|71.0|88|92|93|92|76
赵主|95|80|83|80.0|63|94|76|67|75
钱巨|93|96|98|72.0|80|84|86|98|96
郑电|99|95|63|97.0|98|92|60|90|79
赵工|99|86|60|83.0|86|97|80|98|80
李方|91|83|85|75.0|76|85|74|87|76
李门|90|89|64|76.0|75|89|75|76|72
李几|96|82|70|88.0|79|96|60|85|61
赵夫|94|94|68|98.0|95|85|65|98|63
吴井|92|89|86|79.0|78|68|98|78|73
郑天|91|85|97|84.0|64|93|90|97|93
孙计|96|84|74|91.0|85|64|69|64|66
郑尺|99|84|93|88.0|99|87|76|80|85
孙友|98|95|75|85.0|94|89|69|74|82
郑中|96|81|88|66.0|68|71|88|83|63
赵页|98|97|63|66.0|71|98|97|63|60
郑户|91|88|68|73.0|76|81|87|87|89
王了|95|83|64|94.0|89|71|96|85|76
赵爪|92|92|88|83.0|81|98|81|97|63
吴又|99|99|71|61.0|90|60|65|74|77
钱化|93|92|63|82.0|86|82|88|96|88
吴不|94|83|75|90.0|71|91|84|99|83
吴伏|91|84|66|93.0|62|88|78|81|68
王贝|92|93|75|86.0|70|84|84|84|64
李气|97|99|72|60.0|69|68|67|74|75
李田|91|90|84|71.0|79|80|91|65|66
李下|98|81|65|92.0|72|65|72|64|77
李匕|90|82|96|99.0|87|88|88|64|95
李心|99|97|87|72.0|71|63|98|75|78
print(123,file=open('123.txt','w'))
# 读取我们自己存储的成绩csv,人名以及行索引
s1=pd.read_csv('成绩.csv',index_col='Unnamed: 0')
s1
Unnamed: 0	语文	数学	英语	化学	物理	生物	政治	历史	地理
0	赵大	97	90	68	86	73	94	70	70	72
1	孙兄	91	99	86	89	68	96	70	82	60
2	钱术	95	87	87	67	99	88	85	65	95
3	吴羊	92	98	94	64	96	82	65	85	69
4	王女	91	84	84	88	92	75	82	97	91
5	王卜	94	89	90	99	95	99	67	82	82
6	王可	94	90	76	68	93	82	93	99	83
7	钱巾	97	85	92	81	71	85	90	60	65
8	李丁	90	94	86	71	90	98	60	87	75
9	吴丫	91	82	70	70	86	68	61	94	99
10	吴丑	91	97	78	79	82	95	83	80	92
11	钱火	97	97	72	99	66	67	80	80	73
12	王石	96	83	69	66	90	60	86	93	92
13	李人	91	95	60	96	99	94	69	64	89
14	郑正	90	84	82	62	67	82	88	71	65
15	王乃	93	96	60	79	86	95	89	61	65
16	李寸	94	91	62	71	77	88	61	94	87
17	郑之	96	97	96	74	70	70	72	78	73
18	钱口	96	80	98	69	70	66	73	70	69
19	孙寸	96	81	70	97	74	92	64	94	87
20	吴儿	98	85	71	96	72	83	61	97	98
21	李木	94	82	69	71	88	92	93	92	76
22	赵主	95	80	83	80	63	94	76	67	75
23	钱巨	93	96	98	72	80	84	86	98	96
24	郑电	99	95	63	97	98	92	60	90	79
25	赵工	99	86	60	83	86	97	80	98	80
26	李方	91	83	85	75	76	85	74	87	76
27	李门	90	89	64	76	75	89	75	76	72
28	李几	96	82	70	88	79	96	60	85	61
29	赵夫	94	94	68	98	95	85	65	98	63
30	吴井	92	89	86	79	78	68	98	78	73
31	郑天	91	85	97	84	64	93	90	97	93
32	孙计	96	84	74	91	85	64	69	64	66
33	郑尺	99	84	93	88	99	87	76	80	85
34	孙友	98	95	75	85	94	89	69	74	82
35	郑中	96	81	88	66	68	71	88	83	63
36	赵页	98	97	63	66	71	98	97	63	60
37	郑户	91	88	68	73	76	81	87	87	89
38	王了	95	83	64	94	89	71	96	85	76
39	赵爪	92	92	88	83	81	98	81	97	63
40	吴又	99	99	71	61	90	60	65	74	77
41	钱化	93	92	63	82	86	82	88	96	88
42	吴不	94	83	75	90	71	91	84	99	83
43	吴伏	91	84	66	93	62	88	78	81	68
44	王贝	92	93	75	86	70	84	84	84	64
45	李气	97	99	72	60	69	68	67	74	75
46	李田	91	90	84	71	79	80	91	65	66
47	李下	98	81	65	92	72	65	72	64	77
48	李匕	90	82	96	99	87	88	88	64	95
49	李心	99	97	87	72	71	63	98	75	78

excel

# 存储 前提需要安装 openpyxl
s1.to_excel('成绩.xlsx')
s1.to_excel('成绩1.xlsx',startrow=1,encoding='utf-8')
# 读取excel,参数读取csv ,多列个sheet_name
pd.read_excel('成绩.xlsx')
Unnamed: 0	Unnamed: 0.1	语文	数学	英语	化学	物理	生物	政治	历史	地理
0	0	赵大	97	90	68	86	73	94	70	70	72
1	1	孙兄	91	99	86	89	68	96	70	82	60
2	2	钱术	95	87	87	67	99	88	85	65	95
3	3	吴羊	92	98	94	64	96	82	65	85	69
4	4	王女	91	84	84	88	92	75	82	97	91
5	5	王卜	94	89	90	99	95	99	67	82	82
6	6	王可	94	90	76	68	93	82	93	99	83
7	7	钱巾	97	85	92	81	71	85	90	60	65
8	8	李丁	90	94	86	71	90	98	60	87	75
9	9	吴丫	91	82	70	70	86	68	61	94	99
10	10	吴丑	91	97	78	79	82	95	83	80	92
11	11	钱火	97	97	72	99	66	67	80	80	73
12	12	王石	96	83	69	66	90	60	86	93	92
13	13	李人	91	95	60	96	99	94	69	64	89
14	14	郑正	90	84	82	62	67	82	88	71	65
15	15	王乃	93	96	60	79	86	95	89	61	65
16	16	李寸	94	91	62	71	77	88	61	94	87
17	17	郑之	96	97	96	74	70	70	72	78	73
18	18	钱口	96	80	98	69	70	66	73	70	69
19	19	孙寸	96	81	70	97	74	92	64	94	87
20	20	吴儿	98	85	71	96	72	83	61	97	98
21	21	李木	94	82	69	71	88	92	93	92	76
22	22	赵主	95	80	83	80	63	94	76	67	75
23	23	钱巨	93	96	98	72	80	84	86	98	96
24	24	郑电	99	95	63	97	98	92	60	90	79
25	25	赵工	99	86	60	83	86	97	80	98	80
26	26	李方	91	83	85	75	76	85	74	87	76
27	27	李门	90	89	64	76	75	89	75	76	72
28	28	李几	96	82	70	88	79	96	60	85	61
29	29	赵夫	94	94	68	98	95	85	65	98	63
30	30	吴井	92	89	86	79	78	68	98	78	73
31	31	郑天	91	85	97	84	64	93	90	97	93
32	32	孙计	96	84	74	91	85	64	69	64	66
33	33	郑尺	99	84	93	88	99	87	76	80	85
34	34	孙友	98	95	75	85	94	89	69	74	82
35	35	郑中	96	81	88	66	68	71	88	83	63
36	36	赵页	98	97	63	66	71	98	97	63	60
37	37	郑户	91	88	68	73	76	81	87	87	89
38	38	王了	95	83	64	94	89	71	96	85	76
39	39	赵爪	92	92	88	83	81	98	81	97	63
40	40	吴又	99	99	71	61	90	60	65	74	77
41	41	钱化	93	92	63	82	86	82	88	96	88
42	42	吴不	94	83	75	90	71	91	84	99	83
43	43	吴伏	91	84	66	93	62	88	78	81	68
44	44	王贝	92	93	75	86	70	84	84	84	64
45	45	李气	97	99	72	60	69	68	67	74	75
46	46	李田	91	90	84	71	79	80	91	65	66
47	47	李下	98	81	65	92	72	65	72	64	77
48	48	李匕	90	82	96	99	87	88	88	64	95
49	49	李心	99	97	87	72	71	63	98	75	78
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值