目录
- pandas.DataFrame
- 新建dataframe
- 将数据转化为dataframe
- dict与dataframe
- list与dataframe
- dataframe常用域
- 遍历dataframe
- dataframe排序
- dataframe去重
- pandas读取保存文件
- 保存文件
- 读取文件
- pandas.concat
- pandas.merge
- pandas将dataframe的多列合并为一列
pandas是python中强大的数据处理包,能够进行各式各样的数据处理工作。
pandas.DataFrame
pandas对数据的封装格式。
新建dataframe
示例:
import pandas as pd
# 新建空 dataframe
data1 = pd.DataFrame()
a=[['1','2','3'], ['a','b','c']]
# 通过list来构建dataframe
data=pd.DataFrame(a, columns=['aa','bb','cc']) # columns 列名
data格式(最左侧0,1为行索引号,最上方aa,bb,cc为列名):
将数据转化为dataframe
dict与dataframe
dict变为dataframe:
df = pd.DataFrame(data)
df = pd.DataFrame.from_records(data)
# 即:
df = pd.DataFrame.from_dict(data, orient='columns')
# data: ndarray(结构化dtype),元组列表,dict或DataFrame
dataframe变为dict:
res = df.to_dict(orient='records') # 列名变为key,每行对应的值变为value
# 转化后是 list形式:[{column(列名) : value(值)} … {column:value}];
# list 中每一项是一个dict,表示了该行的 列:值 映射;
其他 orient 形式:to_dict使用
list与dataframe
dataframe常用域
- data.columns:获取所有列名;
- data.iloc[‘列名’]:根据列名,获取某列数据;
- data.iloc[i,j]:根据行列索引,获取指定位置数据;
- data.values:以行为单位,返回dataframe所有数据;
- data.value[i,j]:根据行列索引,获取指定位置数据。
遍历dataframe
dataframe.item():按列遍历,返回列数据 series
dataframe.iterrows():按行遍历,返回(行索引index,行数据series)的元组
import pandas as pd
a=[['1','2','3'], ['a','b','c']]
# 通过list来构建dataframe
data=pd.DataFrame(a, columns=['aa','bb','cc']) # columns 列名
for i,row in data.iterrows():
print(row)
输出:
aa 1
bb 2
cc 3
Name: 0, dtype: object
aa a
bb b
cc c
Name: 1, dtype: object
dataframe排序
- 按索引排序:sort_index()
### 按索引排序,需要指定轴和方向,默认为列方向排序
data.sort_index() # 默认为index升序
data.sort_index(ascending=False) # 此时为index降序
data.sort_index(axis=1,ascending=True,inplace=False,na_position='last')
# 此时为行方向升序,inplace指明是否替代原data,na_position指明缺失值的位置('last','first')
data.sort_index().sort_index(axis=1,ascending=True,inplace=False,na_position='last')
# index和colimns同时排序,可以直接粘在后面
- 按值排序: sort_values()
### 按值排序
unsorted_df.sort_values(by=['col1','col2'])
unsorted_df.sort_values(by=2,axis=1) # axis=1时表明对行方向排序,by=1表示对index=1的行排序
dataframe去重
drop_duplicates() 默认:保留第一个重复值,不更改原数据
参数:
keep:
keep="first":只保留第一个重复值
keep="last":只保留最后一个重复值
keep="False":重复值一个不保留
inplace:
True:在原数据上替换,返回None
False:不在原数据上替换,返回去重后的新dataframe
pandas读取保存文件
保存文件
DataFrame.to_csv函数,主要参数:
import pandas as pd
df.to_csv(path_or_buf="filename.csv" , # 保存文件路径,可保存csv,txt,excel
sep=',', # 同一行数据的分隔符,默认是逗号
columns=None, # 默认保存所有列
header=True, # 默认保存列索引
index=True) # 默认保存行索引
- sep:通常是保存csv文件所用的分隔符,会将 同一行 不同列 数据按sep指定的符号分隔开。
- header:默认为True,保存列索引(列名),即上图最上方的列名,保存的文件会多出一行数据。
- index:默认为True,保存行索引,即上图中的最左侧0,1,保存的文件中会多出一列数据,变为3列。
读取文件
DataFrame.read_csv函数,主要参数:
import pandas as pd
pd.read_csv(filename, # 文件读取路径
header="infer", # 默认第一列是列索引
names=None, # 不自定义列名
nrows=None, # 用于指定行索引是哪列,默认自动生成行索引
usecols=None, # 默认读取所有列
index_col=None, # 默认读取所有行
skiprows=None )# 默认不跳过开头的行
- header:用来选择哪一行作为列索引。可以填一个整数,填0表示第1行作为列索引,填5表示第6行作为列索引。填None表示默认不选任何行做为列索引,而是自动生成一个从0开始的列索引。
- names:当 header=None 是,可以通过设置这个参数来自定义列索引。
pandas.concat
功能:按照指定axis,合并两个DataFrame。
import pandas as pd
pd.concat([data_1, data_2], axis=0) # 将两个DataFrame按行拼接,即上下拼接起来
pd.concat([data_1, data_2], axis=1) # 将两个DataFrame按列拼接,即左右拼接起来
pandas.merge
功能:求两个DataFrame的交 / 并 / 补集,类似SQL中的内连接、外连接等操作。
import pandas as pd
dataframe_3 = pd.merge(dataframe_1, dataframe_2, how='inner')
# inner内连接 按照两者的 共有列 进行连接,也可通过on参数指定 共有列
参考链接:[Python3]pandas.merge用法详解
pandas将dataframe的多列合并为一列
pandas.Series.str.cat方法,不过cat方法只能处理str类型,所以应提前将非str列数据转化为str类型(.map(str)操作),再进行合并。
data['date'] = data["year"].map(str).str.cat([data["month"].map(str), data['day'].map(str)], sep='-')
参考链接:dataframe多列合并成一列