pandas学习笔记(一):数据读入读出基本操作
注:学习笔记基于文彤老师的pandas的系列课程
课程链接:https://study.163.com/course/courseMain.htm?courseId=1005124008&share=1&shareId=1146477588
# 设定系统环境
import pandas as pd
pd.options.display.max_rows = 10 # 设定自由列表输出最多为10行
pd.__version__
# 显示当前Pandas版本号,默认输出最后一行内容(即使没有打印输出)
'1.1.0'
1. 获取数据
1.1新建数据框
变量列就是一个有顺序的数据序列(一维数组),可以看作是一个增强版的list。 对应了numpy中的Series格式,偷懒的话直接用list格式提供即可,字典格式可以为每个字典元素提供名称,是最佳选择。
pd.DataFrame(
data = None : 数据列表,字典格式时直接同时提供变量名
columns = None : 变量名列表
)
df1 = pd.DataFrame(data = [[1,"test"], [2,"train"],[3,"test"],[4,"train"]], columns = [ 'var2', 'var3' ])
df1
var2 | var3 | |
---|---|---|
0 | 1 | test |
1 | 2 | train |
2 | 3 | test |
3 | 4 | train |
Series
python的原生数据结构中没有和数组对应的类型。
list虽然比较接近数组的需求,但是没有索引和排序功能。
pd.Series可以被简单理解为带索引的有序列表,从而能够更好的满足数据分析的需求。
s1 = pd.Series(["test","train","test","train"])
s1
0 test
1 train
2 test
3 train
dtype: object
pd.Series(data = ["test","train","test","train"], name = 'var3')
0 test
1 train
2 test
3 train
Name: var3, dtype: object
print(type(df1.var3))
df1.var3
<class 'pandas.core.series.Series'>0 test
1 train
2 test
3 train
Name: var3, dtype: object
df中的每一列实际上就是一个Series。
Series使用的很多命令都和DataFrame相似,可以直接套用。
1.2读入文本格式数据文件
pd.read_csv(
filepath_or_buffer :要读入的文件路径
sep = ‘,’:列分隔符
header = ‘infer’:指定数据中的第几行作为变量名
names = None :自定义变量名列表
index_col = None :将会被用作索引的列名,多列时只能使用序号列表
usecols = None :指定只读入某些列,使用索引列表或者名称列表均可。
encoding = None:读入文件的编码方式(utf-8/GBK,中文数据文件最好设定为utf-8)
na_values :指定将被读入为缺失值的数值列表,默认下列数据被读入为缺失值:
‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’,
‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’,
‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’
):读取csv格式文件,但也可通用于文本文件读取
df2 = pd.read_csv("univ.csv", encoding ="GBK")#使用英文名称,否则可能会报错
#把文件放到了该目录下,因此不需要再写路径,注意编码要写
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
pandas.read_table():更通用的文本文件读取命令
主要的区别在于默认的sep=“\t”,即tab符号。
df2 = pd.read_table("univ.csv", sep=',',encoding ="gbk" )#注意sep
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
df2.agg("count")
名次 100
学校名称 100
总分 100
类型 100
所在省份 100
所在城市 100
办学方向 100
主管部门 100
dtype: int64
1.3读入EXCEL文件
pd.read_excel(
filepath_or_buffer:要读入的文件路径
sheet_name:要读入的表单,字符串或者数字序号均可,默认读入第一个
)
df2 = pd.read_excel("高校信息.xlsx", sheet_name = 0)
df2
名次 | 学校名称 | 总分 | 类型 | 所在省份 | 所在城市 | 办学方向 | 主管部门 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 北京大学 | 100.00 | 综合 | 北京 | 北京市 | 中国研究型 | 教育部 |
1 | 2 | 清华大学 | 98.50 | 理工 | 北京 | 北京市 | 中国研究型 | 教育部 |
2 | 3 | 复旦大学 | 82.79 | 综合 | 上海 | 上海市 | 中国研究型 | 教育部 |
3 | 4 | 武汉大学 | 82.43 | 综合 | 湖北 | 武汉市 | 中国研究型 | 教育部 |
4 | 5 | 浙江大学 | 82.38 | 综合 | 浙江 | 杭州市 | 中国研究型 | 教育部 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
95 | 96 | 浙江师范大学 | 63.37 | 师范 | 浙江 | 金华市 | 区域特色研究型 | 浙江省 |
96 | 97 | 安徽大学 | 63.34 | 综合 | 安徽 | 合肥市 | 区域研究型 | 安徽省 |
97 | 98 | 首都医科大学 | 63.32 | 医药 | 北京 | 北京市 | 区域特色研究型 | 北京市 |
98 | 99 | 江南大学 | 63.31 | 综合 | 江苏 | 无锡市 | 区域特色研究型 | 教育部 |
99 | 100 | 山西大学 | 63.29 | 综合 | 山西 | 太原市 | 区域研究型 | 山西省 |
100 rows × 8 columns
2.读入统计软件数据集
2.1直接读入SAS/Stata/SPSS数据文件
pd.read_sas() # 必要时可以使用encoding选项
pd.read_spss() # 0.25 版之后新增
pd.read_stata()
df4 = pd.read_sas('air.sas7bdat')
df4
DATE | AIR | |
---|---|---|
0 | 1949-01-01 | 112.0 |
1 | 1949-02-01 | 118.0 |
2 | 1949-03-01 | 132.0 |
3 | 1949-04-01 | 129.0 |
4 | 1949-05-01 | 121.0 |
... | ... | ... |
139 | 1960-08-01 | 606.0 |
140 | 1960-09-01 | 508.0 |
141 | 1960-10-01 | 461.0 |
142 | 1960-11-01 | 390.0 |
143 | 1960-12-01 | 432.0 |
144 rows × 2 columns
pd.read_spss(
path : 要读入的文件路径
usecols = None : 需要读入的变量列表,list-like,默认全部读入
convert_categoricals = True : 是否将类别列转换为pd.Categorical
)
# read_spss()只能获取数据本身,数据的附加信息会全部丢失
# read_spss()无法直接读取GBK编码的数据文件
spssfile = pd.read_spss('air.sav')
spssfile.head()
DATE | AIR | |
---|---|---|
0 | 1949-01-01 | 112.0 |
1 | 1949-02-01 | 118.0 |
2 | 1949-03-01 | 132.0 |
3 | 1949-04-01 | 129.0 |
4 | 1949-05-01 | 121.0 |
2.2用pyreadstat包读入SPSS文件
pyreadstat包可以作为pandas的接口直接读写SAS、SPSS、Stata数据文件。
read_spss()本质上只是对pyreadstat包的简单调用。
除读入数据外,还可以提取完整的数据附加信息供使用。
#pip install pyreadstat
pyreadstat.read_sav(
filename_path : 需要读取的文件路径,utf-8格式。
encoding = None : 指定数据读入的编码,iconv-compatible名称。
usecols : 需要读入的变量列,list格式。
metadataonly = False : 只读取matadata,不读取具体数据.
apply_value_formats = False : 用值标签代替原始数值读入。如果变量值为true,0代表男,1代表女,那么读入时候把0换成男,1会换成女。
formats_as_category = True : 当apply_value_formtas为True时,是否将设定格式的变量值转化为pd.categories。
user_missing = False : 是否按原值读入自定义缺失值,否则一律读入为nan。
dates_as_pandas_datetime = False : 将date转换为pd.datetime64格式。
disable_datetime_conversion = False : 是否自动转换日期时间变量,否则一律按照数值读入。
row_limit = 0 : 读入的最大行数,0为无限制。
row_offset = 0 : 读入时跳开前多少行。
)
#返回两个数据,因此最好用两个变量接受,不然会变成元组:
data_frame : 包括全部数据
metadata : 包括附加信息的metadata对象
# 直接用pyreadstat包可以取出更多信息
import pyreadstatdf, meta = pyreadstat.read_sav("ccss_sample.sav", encoding = "GBK")df.head()
time | id | s0 | s2 | s3 | s4 | s5 | s7 | s9 | c0_1 | ... | Qs9 | Qa3 | Qa4 | Qa8 | Qa9 | Qa10 | Qa16 | index1 | index1a | index1b | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 200704.0 | 1.0 | 100.0 | 1.0 | 20.0 | 4.0 | 3.0 | 2.0 | 4.0 | 2.0 | ... | 2500.0 | 100.0 | 200.0 | 200.0 | 200.0 | 100.0 | 100.0 | 109.349371 | 88.035919 | 121.071238 |
1 | 200704.0 | 2.0 | 100.0 | 1.0 | 24.0 | 2.0 | 3.0 | 2.0 | 8.0 | 2.0 | ... | 7000.0 | 100.0 | 100.0 | 100.0 | 150.0 | 200.0 | 100.0 | 93.728032 | 88.035919 | 96.856991 |
2 | 200704.0 | 3.0 | 200.0 | 1.0 | 20.0 | 2.0 | 9.0 | 2.0 | 2.0 | 2.0 | ... | 1250.0 | 100.0 | 150.0 | 150.0 | 100.0 | 100.0 | 100.0 | 93.728032 | 88.035919 | 96.856991 |
3 | 200704.0 | 4.0 | 100.0 | 2.0 | 65.0 | 3.0 | 1.0 | 1.0 | 2.0 | 2.0 | ... | 1250.0 | 150.0 | 150.0 | 100.0 | 100.0 | 100.0 | 200.0 | 109.349371 | 154.062858 | 84.749867 |
4 | 200704.0 | 5.0 | 200.0 | 2.0 | 40.0 | 2.0 | 3.0 | 1.0 | NaN | 2.0 | ... | NaN | 100.0 | 100.0 | 100.0 | 100.0 | 150.0 | 100.0 | 85.917363 | 88.035919 | 84.749867 |
5 rows × 32 columns
meta.column_labels#读入列变量名称的标签的附加信息
['月份','ID','S0. 城市','S2. 性别','S3. 年龄','S4. 学历','S5. 职业','S7. 婚姻状况','S9. 家庭月收入',......'A9. 那么您认为一年之后本地区的就业状况将会如何变化?',None,None,None,'总指数','现状指数','预期指数']
meta.column_names_to_labels#读入名称和变量名称之间的
{'O1': 'O1. 是否拥有家用轿车','Qa10': None,'Qa16': None,'Qa3': None,'Qa4': None,'Qa8': None,......'index1a': '现状指数','index1b': '预期指数','s0': 'S0. 城市','s2': 'S2. 性别','s3': 'S3. 年龄','s4': 'S4. 学历','s5': 'S5. 职业','s7': 'S7. 婚姻状况','s9': 'S9. 家庭月收入','time': '月份'}
meta.value_labels
#变量值标签,label0就指代第一个变量,apply_value_formats可实现该转换
{'labels0': {100.0: '100北京', 200.0: '200上海', 300.0: '300广州'},'labels1': {1.0: '男', 2.0: '女'},'labels10': {1.0: '1 非常好',2.0: '2 比较好',3.0: '3 保持现状',4.0: '4 比较差',5.0: '5 非常差',9.0: '9 说不清/拒答'},......'labels9': {0.0: '中性原因',10.0: '改善:收入相关',20.0: '改善:就业状况相关',30.0: '改善:投资相关',40.0: '改善:家庭开支相关',50.0: '改善:政策/宏观经济',90.0: '不知道/拒答',110.0: '恶化:收入相关',120.0: '恶化:就业状况相关',130.0: '恶化:投资相关',140.0: '恶化:家庭开支相关',150.0: '恶化:政策/宏观经济相关'}}
# 这里的得到的res实际上是tuple(元组)
res = pyreadstat.read_sav("ccss_sample.sav", encoding = "GBK", apply_value_formats = True)
res[0].head()
time | id | s0 | s2 | s3 | s4 | s5 | s7 | s9 | c0_1 | ... | Qs9 | Qa3 | Qa4 | Qa8 | Qa9 | Qa10 | Qa16 | index1 | index1a | index1b | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 200704.0 | 1.0 | 100北京 | 男 | 20.0 | 本科 | 公司普通职员(白领) | 未婚 | 2000-2999元 | 2 无 | ... | 2500.0 | 100.0 | 200.0 | 200.0 | 200.0 | 100.0 | 100.0 | 109.349371 | 88.035919 | 121.071238 |
1 | 200704.0 | 2.0 | 100北京 | 男 | 24.0 | 高中/中专 | 公司普通职员(白领) | 未婚 | 6000-7999元 | 2 无 | ... | 7000.0 | 100.0 | 100.0 | 100.0 | 150.0 | 200.0 | 100.0 | 93.728032 | 88.035919 | 96.856991 |
2 | 200704.0 | 3.0 | 200上海 | 男 | 20.0 | 高中/中专 | 无业/待业/失业/家庭主妇 | 未婚 | 1000-1499元 | 2 无 | ... | 1250.0 | 100.0 | 150.0 | 150.0 | 100.0 | 100.0 | 100.0 | 93.728032 | 88.035919 | 96.856991 |
3 | 200704.0 | 4.0 | 100北京 | 女 | 65.0 | 大专 | 企/事业管理人员 | 已婚 | 1000-1499元 | 2 无 | ... | 1250.0 | 150.0 | 150.0 | 100.0 | 100.0 | 100.0 | 200.0 | 109.349371 | 154.062858 | 84.749867 |
4 | 200704.0 | 5.0 | 200上海 | 女 | 40.0 | 高中/中专 | 公司普通职员(白领) | 已婚 | NaN | 2 无 | ... | NaN | 100.0 | 100.0 | 100.0 | 100.0 | 150.0 | 100.0 | 85.917363 | 88.035919 | 84.749867 |
5 rows × 32 columns
res[0].s9.head()
0 2000-2999元
1 6000-7999元
2 1000-1499元
3 1000-1499元
4 NaN
Name: s9, dtype: category
Categories (13, object): [1000-1499元, 10000-14999元, 1500-1999元, 15000-19999元, ..., 5000-5999元, 6000-7999元, 8000-9999元, 999元或以下]
读入数据表
pd.read_sql(
sql : 需要执行的SQl语句/要读入的表名称
con : SQLAlchemy连接引擎名称
index_col = None : 将被用作索引的列名称
columns = None : 当提供表名称时,需要读入的列名称list
)
spssfile = pd.read_spss('air.sav')
spssfile.to_numpy()
array([[datetime.date(1949, 1, 1), 112.0],[datetime.date(1949, 2, 1), 118.0],[datetime.date(1949, 3, 1), 132.0],[datetime.date(1949, 4, 1), 129.0],[datetime.date(1949, 5, 1), 121.0],......[datetime.date(1960, 8, 1), 606.0],[datetime.date(1960, 9, 1), 508.0],[datetime.date(1960, 10, 1), 461.0],[datetime.date(1960, 11, 1), 390.0],[datetime.date(1960, 12, 1), 432.0]], dtype=object)
实战:读入北京PM2.5数据
df3 = pd.read_csv("PM25\Beijing_2012_HourlyPM2.5_created20140325.csv",encoding ="gbk" )#注意sep
df3.iloc[2:]#从第三行开始输出数据
A fact sheet with definitions and metadata for this dataset can be found at http://www.stateair.net/web/historical/1/1.html. | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | Unnamed: 4 | Unnamed: 5 | Unnamed: 6 | Unnamed: 7 | Unnamed: 8 | Unnamed: 9 | Unnamed: 10 | |
---|---|---|---|---|---|---|---|---|---|---|---|
2 | Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name |
3 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid |
4 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid |
5 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid |
6 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
8782 | Beijing | PM2.5 | 2012-12-31 19:00 | 2012 | 12 | 31 | 19 | 131 | 礸/mg?1 Hr | Valid | NaN |
8783 | Beijing | PM2.5 | 2012-12-31 20:00 | 2012 | 12 | 31 | 20 | 113 | 礸/mg?1 Hr | Valid | NaN |
8784 | Beijing | PM2.5 | 2012-12-31 21:00 | 2012 | 12 | 31 | 21 | 45 | 礸/mg?1 Hr | Valid | NaN |
8785 | Beijing | PM2.5 | 2012-12-31 22:00 | 2012 | 12 | 31 | 22 | 39 | 礸/mg?1 Hr | Valid | NaN |
8786 | Beijing | PM2.5 | 2012-12-31 23:00 | 2012 | 12 | 31 | 23 | 35 | 礸/mg?1 Hr | Valid | NaN |
8785 rows × 11 columns
bj2014 = pd.read_csv("PM25\Beijing_2014_HourlyPM25_created20150203.csv",encoding ="gbk",usecols=[0,1,2,3,4,5,6,7,8,9,10])
#注意sep,去掉文件开头的繁杂信息就可以了。
bj2014
Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | Beijing | PM2.5 | 2014-1-1 0:00 | 2014 | 1 | 1 | 0 | 53 | 礸/m?1 Hr | Valid | NaN |
1 | Beijing | PM2.5 | 2014-1-1 1:00 | 2014 | 1 | 1 | 1 | 65 | 礸/m?1 Hr | Valid | NaN |
2 | Beijing | PM2.5 | 2014-1-1 2:00 | 2014 | 1 | 1 | 2 | 70 | 礸/m?1 Hr | Valid | NaN |
3 | Beijing | PM2.5 | 2014-1-1 3:00 | 2014 | 1 | 1 | 3 | 79 | 礸/m?1 Hr | Valid | NaN |
4 | Beijing | PM2.5 | 2014-1-1 4:00 | 2014 | 1 | 1 | 4 | 92 | 礸/m?1 Hr | Valid | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
8755 | Beijing | PM2.5 | 2014-12-31 19:00 | 2014 | 12 | 31 | 19 | 10 | 礸/m?1 Hr | Valid | NaN |
8756 | Beijing | PM2.5 | 2014-12-31 20:00 | 2014 | 12 | 31 | 20 | 10 | 礸/m?1 Hr | Valid | NaN |
8757 | Beijing | PM2.5 | 2014-12-31 21:00 | 2014 | 12 | 31 | 21 | 8 | 礸/m?1 Hr | Valid | NaN |
8758 | Beijing | PM2.5 | 2014-12-31 22:00 | 2014 | 12 | 31 | 22 | 12 | 礸/m?1 Hr | Valid | NaN |
8759 | Beijing | PM2.5 | 2014-12-31 23:00 | 2014 | 12 | 31 | 23 | 20 | 礸/m?1 Hr | Valid | NaN |
8760 rows × 11 columns
bj2012 = pd.read_csv("PM25\Beijing_2012_HourlyPM2.5_created20140325.csv",encoding ="gbk",skiprows=2)#注意sep
bj2012
Unnamed: 0 | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | Unnamed: 4 | Unnamed: 5 | Unnamed: 6 | Unnamed: 7 | Unnamed: 8 | Unnamed: 9 | Unnamed: 10 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | Site | Parameter | Date (LST) | Year | Month | Day | Hour | Value | Unit | Duration | QC Name |
1 | Beijing | PM2.5 | 2012-1-1 0:00 | 2012 | 1 | 1 | 0 | 303 | 礸/mg? | 1 Hr | Valid |
2 | Beijing | PM2.5 | 2012-1-1 1:00 | 2012 | 1 | 1 | 1 | 215 | 礸/mg? | 1 Hr | Valid |
3 | Beijing | PM2.5 | 2012-1-1 2:00 | 2012 | 1 | 1 | 2 | 222 | 礸/mg? | 1 Hr | Valid |
4 | Beijing | PM2.5 | 2012-1-1 3:00 | 2012 | 1 | 1 | 3 | 85 | 礸/mg? | 1 Hr | Valid |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
8780 | Beijing | PM2.5 | 2012-12-31 19:00 | 2012 | 12 | 31 | 19 | 131 | 礸/mg?1 Hr | Valid | NaN |
8781 | Beijing | PM2.5 | 2012-12-31 20:00 | 2012 | 12 | 31 | 20 | 113 | 礸/mg?1 Hr | Valid | NaN |
8782 | Beijing | PM2.5 | 2012-12-31 21:00 | 2012 | 12 | 31 | 21 | 45 | 礸/mg?1 Hr | Valid | NaN |
8783 | Beijing | PM2.5 | 2012-12-31 22:00 | 2012 | 12 | 31 | 22 | 39 | 礸/mg?1 Hr | Valid | NaN |
8784 | Beijing | PM2.5 | 2012-12-31 23:00 | 2012 | 12 | 31 | 23 | 35 | 礸/mg?1 Hr | Valid | NaN |
8785 rows × 11 columns
3.保存数据
3.1 保存数据至外部文件
df.to_csv(
filepath_or_buffer:要保存的文件路径
sep = ‘,’ :列分隔符
columns :需要导出的变量列表
header = True :指定导出数据的新变量名,可直接提供list
index = True :是否导出索引
mode = ‘w’ : Python写模式,读写方式:r , r+ , w , w+ , a , a+
encoding = ‘utf-8’ :默认导出的文件编码格式
)
df2.to_csv('temp.txt', columns =['名次','总分'], header = ['名次2','总分2'], index = False)
#header要和表列的个数相对应
excel上面to_csv的命令也可以用,同时注意下面的命令
df.to_excel(
filepath_or_buffer:要读入的文件路径
sheet_name = ‘Sheet1’ :要保存的表单名称
)
df2.to_excel('temp.xlsx', index = False, sheet_name = 'data')
pyreadstat.write_sav(
df : 要保存的df名称。
dst_path : 要保存的sav/zsav文件路径及名称。
compress = Flase : 是否保存为压缩的zsav格式。
column_labels : 所保存文件的变量名标签list。(list必须和变量列等长,无标签的用None表示。)
variable_value_labels : 所保存文件的变量值标签,dict格式。(key为变量名,value为具体数值和值标签的dict。)
missing_ranges : 用户自定义缺失值,dict格式。(key为变量名,value为list格式。list元素的设定格式和SPSS中的格式相同。)
variable_measure : 变量测量尺度,dict格式。(dict的values为 “nominal”, “ordinal”, “scale” or “unknown” 。)
note : 所保存文件的文件注释。
file_label : 所保存文件的文件标签。
variable_display_width : 变量列显示宽度,dict格式。
)
spssfile = pd.read_spss('air.sav')
spssfile.head()
DATE | AIR | |
---|---|---|
0 | 1949-01-01 | 112.0 |
1 | 1949-02-01 | 118.0 |
2 | 1949-03-01 | 132.0 |
3 | 1949-04-01 | 129.0 |
4 | 1949-05-01 | 121.0 |
# 如果外部文件已存在,命令不会被执行,且不报错。
pyreadstat.write_sav(spssfile, 'tmp.sav',column_labels = [None, 'var b'],variable_value_labels = {'AIR' : {1 : 'a',2 : 'b'}})
3.2 保存数据至数据库
df.to_sql(
name : 将要存储数据的表名称
con : SQLAlchemy引擎/DBAPI2连接引擎名称
if_exists = ‘fail’ : 指定表已经存在时的处理方式
( fail : 不做任何处理(不插入新数据)
replace : 删除原表并重建新表
append : 在原表后插入新数据 )
index = True : 是否导出索引
)
实战:保存北京PM2.5数据为数据文件
bj2012.to_excel('bj2012.xlsx', index = False, sheet_name = 'data',header=False)
#如果已经有源文件,保证原文件关闭
#header=False 可以把unnamed哪一行去掉
bj2012.to_csv('bj2012.csv', index = False, header=False)
bj2012.to_csv('bj2012.txt', index = False, header=False)
pandas学习笔记(一):数据读入读出基本操作相关推荐
- 数据分析之pandas学习笔记(六)(层次化索引、重塑、轴向旋转、行列变换、合并表数据)
数据分析之Pandas学习笔记(六)(层次化索引.重塑.轴向旋转.行列变换.合并表数据) level层次化索引 unstack()与stack()进行重塑,即:行列索引变换 swaplevel()交换 ...
- pandas学习笔记:pandas.Dataframe.rename()函数用法
pandas学习笔记:pandas.Dataframe.rename()函数用法 pandas.Dataframe.rename()函数主要是用来修改Dataframe数据的行名和列名. 主要用到的参 ...
- Pandas学习笔记(一)
Pandas学习笔记一 Pandas数组读取 读取csv.tsv.txt文件 读取excel文件 读取mysql数据表 Pandas数据结构 创建Series的几种方法 根据标签查询Series数据 ...
- pandas学习笔记之DateFrame
pandas学习笔记之DateFrame 文章目录 pandas学习笔记之DateFrame 1.DateFrame的创建 1)认识DataFrame对象 2)由二维列表创建(默认index和colu ...
- PowerBuilder学习笔记(4)数据窗口(DataWindow)
PowerBuilder学习笔记(4)数据窗口(DataWindow) 一.数据窗口对象(Object)与数据窗口控件(Control) 数据窗口对象是利用PowerBuilder所提供的数据 ...
- [Pandas 学习笔记] - No.1 pandas学习笔记
pandas学习笔记 pandas是基于numpy开发出的数据分析包,用于高效地操作大型数据集.pandas的数据结构有三种 分别为 series,dataframe和panel,对应一维,二维,三维 ...
- pandas学习笔记之Series
pandas学习笔记之Series 文章目录 pandas学习笔记之Series pandas中Series的创建 1)用python中的列表list创建: 2)用numpy数组创建 3)用pytho ...
- mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法
本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) creat ...
- 学习笔记之数据可视化(二)—— 页面布局(下)
续上一章 2.7 地图区域(.map) 2.7.1 实现步骤: 2.8 用户统计模块 2.8.1 布局: 2.8.2 柱状图 2.9 订单模块 2.9.1 订单区域布局 2.9.2 订单区域(orde ...
- 学习笔记之数据可视化(二)——页面布局(中)
续上一章 2.6 监控区域布局 2.6.1 布局结构解析: 2.6.2 样式描述: 2.6.3 HTML结构及CSS样式代码 2.6.3 ### 监控区域-效果 2.6.7 点位区域(point) 2 ...
最新文章
- KNN 分类算法原理代码解析
- MDK编译后生成bin文件占用FLASH大小说明
- 编程软件python图片-python Plotly绘图工具的简单使用
- Spring Integration 4.3.10 发布,Spring 消息通信
- vue-router嵌套路由,默认子路由设置
- paip.哈米架构CAO.txt
- 中国招商银行设计严重缺陷
- git 如何忽略掉文件夹_#PY小贴士# 我的git仓库为什么每次提交都有很多改动?
- Spring Bean的循环依赖解决方案
- html视频播放 bootstrap,基于Bootstrap和jQuery的视频播放器插件
- python 实现modBus协议的crc校验算法
- Coablt strike官方教程中文版
- 60创意的USB设备和小工具
- 已拦截跨源请求:同源策略禁止读取位于 http:**** 的远程资源。(原因:CORS 头缺少 ‘Access-Control-A
- 「股价飙到100美元我就纹身」,黄仁勋用十年站在了芯片塔尖
- discuz默认显示用户昵称
- Python中用fabric库来远程连接服务器
- 诺基亚升级Android10,诺基亚Android 10系统更新,诺基亚7+的性能得到可完善
- arduino接收hmi屏幕_求助 连接 Arduino 与威伦通触摸屏
- Activity是啥子