python数据导入、导出
计量主要调用的模块:statsmodels is a Python module that provides classes and functions for the estimation of many different statistical models
在计量实战中,我们保留的数据格式主要是 TXT、CSV、Excel 三种格式,其中TXT、CSV更为通用和更少出错
- 常用的包
import pandas as pd
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
import scipy.stats as stats
from statsmodels.stats.anova import anova_lm
import matplotlib.pyplot as plt
import sklearn import linear_model
- 读入CSV数据
import pandas as pd
df = pd.read_csv("D:\\myfolder\\xl1-1.csv")
print(df)
- 读入Excel数据
#读取excel之前先打开命令行,安装xlrd。即在命令行中输入pip install xlrd。
import pandas as pd
df = pd.read_excel("D:\\myfolder\\test.xlsx")
print(df)
- 导出到CSV
import pandas as pd
df = pd.read_excel("D:\\myfolder\\test.xlsx")
print(df)
df.to_csv("D:\\myfolder\\testcsv.csv", encoding='utf-8', index=False)
#数据导出到tsetcsv.csv#
将test.xlsx的数据导入到testcsv.csv文件中
#数据中含有中文,使用‘utf-8’,index=false去掉行名称导出
- 导出到Excel
#先安装openpyxl包
import pandas as pd
import openpyxl
df = pd.read_excel("D:\\myfolder\\test.xlsx")
df.to_excel("D:\\myfolder\\excel2excel.xlsx", encoding='utf-8', index=False)
#数据导出到excel2excel.xlxs#
dt = pd.read_excel("D:\\myfolder\\excel2excel.xlsx")
print(dt)
读入TXT文件:全面的解读
1.读不同分隔符的文本文件,用参数sep
2.读无字段名(表头)的文本文件 ,用参数names
3.为文本文件制定索引,用index_col
import pandas as pd
data = pd.read_table('d:/new.txt',delim_whitespace=True,index_col=0)
#header=None:没有每列的column name,可以自己设定
#encoding='gb2312':其他编码中文显示错误
#delim_whitespace=True:用空格来分隔每行的数据
#index_col=0:设置第1列数据作为index片
data.to_excel("d:/my_new.xls")
#####
import pandas as pd #引入pandas包
citys=pd.read_table('./1.txt',sep='\t',header=None) #读入txt文件,分隔符为\t
print(citys)
seq标识分隔符,分隔符为\t ,即制表符,表示列与列之间用\t分开
header=None 表示txt文件的第一行不是列的名字,是数据。若不写head=None,则读入txt数据时,会没了第一行
pandas.read_table(filepath_or_buffer,sep='\t',delimiter=None,
header='infer',names=None,index_col=None,usecols=None,squeeze=False,
prefix=None,mangle_dupe_cols=True,dtype=None,engine=None,converters=None,
true_values=None,false_values=None,skipinitialspace=False,skiprows=None,
nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=False,
skip_blank_lines=True,parse_dates=False,infer_datetime_format=False,
keep_date_col=False,date_parser=None,dayfirst=False,iterator=False,
chunksize=None,compression='infer',thousands=None,decimal=b'.',lineterminator=None,
quotechar='"',quoting=0,escapechar=None,comment=None,encoding=None,dialect=None,
tupleize_cols=None,error_bad_lines=True,warn_bad_lines=True,skipfooter=0,
doublequote=True,delim_whitespace=False,low_memory=True,memory_map=False,
float_precision=None)
6. 详细的说明
将表格型数据读取为DataFrame对象是pandas的重要特性。read_csv和read_table应该是使用最多的函数。
假设想要message列成为返回DataFrame的索引,则可以指定位置4的列为索引,或将’message’传给参数index_col:
#有时候数据文件没有表头,所以自己定义一下column名称#
import pandas as pd
names = ['a', 'b', 'c' ,'d', 'message']
pd.read_csv('ex1.csv', names=names, index_col='message')
message a b c d # 以message为索引
hello 1 2 3 4
world 5 6 7 8
foo 9 10 11 12
d = pd.DataFrame({
'key1' : ['one', 'one', 'one', 'two', 'two', 'two'],
'key2' : ['a', 'b' ,'c' ,'a' ,'b' ,'c'],
'v1' : [1,3,5,7,9,11],
'v2' : [2,4,6,8,10,12]})
print(d)
'''
key1 key2 v1 v2
0 one a 1 2
1 one b 3 4
2 one c 5 6
3 two a 7 8
4 two b 9 10
5 two c 11 12
'''
d.to_csv('csv_mindex.csv', index=False) # 取消索引的存储 以防后序读取出现错误
'''
key1,key2,v1,v2
one,a,1,2
one,b,3,4
one,c,5,6
two,a,7,8
two,b,9,10
two,c,11,12
'''
# 从多个列中形成一个分层索引
parsed = pd.read_csv('csv_mindex.csv', index_col=['key1', 'key2'])
print(parsed)
'''
v1 v2
key1 key2
one a 1 2
b 3 4
c 5 6
two a 7 8
b 9 10
c 11 12
当字段是以多种不同数量的空格分开时,尽管你可以手工处理,但在这些情况下也可以向read_table传入一个正则表达式作为分隔符。在本例中,正则表达式为\s+,因此我们可以得到:
In [91]: reslut = pd.read_table('ex3.txt', sep='\s+')
In [92]: reslut
Out[92]:
A B C
aaa -2.00 -4.0000 -6.00
bbb -3.00 23.0000 21.00
ccc -1.23 0.2255 9.12
上例中,由于列名的数量比数据的列数少一个,因此read_table推断第一列应当作为DataFrame的索引。
使用DataFrame的to_csv方法,可以将数据导出为逗号分隔的文件,当然,其他的分隔符也是可以的:
In [13]: data = pd.DataFrame(np.arange(12).reshape((3,4)),
...: index=['a', 'b', 'c'],
...: columns=['one', 'two', 'three', 'four'])
In [14