文件读取
# csv Excel 读
df = pd.read_csv("/dir", header=0, sep="|", index_col=False)
df = pd.read_excel("excel_file")
# 导出 Excel
df.to_excel('/dir', index=True,encoding='utf-8',sheet_name='Sheet')
df.to_csv("data.csv", sep=",", index=False)
预览、定位选择
# 预览
df.index
df.columns
df.head(10)
df.tail(10)
df.info() #特征信息
df.describe() #统计信息
# 选择行、列
df.loc[index_name, col_name]
# 基于标签(label,行标签(index)和列标签(columns))选择数据行
# 1.使用单个标签。如果.loc[]中只有单个标签,那么选择的是某一行,标签值为 index 的值而非序号
# 2.标签 list ([,])或切片 [:]
# 3.布尔值 df.loc[df.rev>100, ['col_name']]
df.iloc[index_seq, col_name]
排序
pd.sort_index()
pd.sort_values('xx', ascending=True)
# 合并单元格导出、多层索引排序
rst.set_index(["SINGER1","SINGER2","singer_cnt","LANG"], inplace=True)
rst.sort_index(level='singer_cnt',ascending=False)
修改列名
pd.columns = []
df.rename(columns={'a':'A'}, inplace=True)
不采用科学计数
pd.set_option('display.float_format', lambda x: '%.5f' % x)
行转列
# 将 stat_date 按行组织
# pivot(index,columns,values)
db_mid_daily_rev.pivot('mid', 'stat_date', 'rev').fillna(0)
# 注意 db_mid_daily_rev 不能设置 'mid' 为 index
# 如果 index 对应 column 出现重复,需使用 pivot_table
d.pivot_table(index='Item', columns='CType', values='USD', aggfunc=np.min)
https://nikgrozev.com/2015/07/01/reshaping-in-pandas-pivot-pivot-table-stack-and-unstack-explained-with-pictures/
运算
df['col2'] = df['col1'].map(lambda x: x**2)
df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1)
# 筛选
usr[(usr['TOT_CNSM_AMT']<=80000)]
# 聚合函数
x['count'].sum()
df['col2'] = df.groupby('col1').agg({'col1':{'col1_mean': mean, 'col1_sum‘’: sum}, 'col2': {'col2_count': count}})
## 累加(先排序,然后对其中一列累加)
city_cnt_one.sort_values('join_time')['count'].cumsum()
读取文本初始化 DataFrame 并进行聚合运算
#!/usr/bin/env python3
# coding=utf-8
import csv
from functools import reduce
from pandas.core.frame import DataFrame
kv = []
with open('x.txt', 'r') as f:
for line in f.readlines():
l = line.split('|')
kv.append(['|'.join(l[0:3]),l[3].split(':')[0],l[4],l[5].strip()] )
x = DataFrame(kv)
print(x.groupby(0).agg({1:min,2:min,3:max}))
#y = x.groupby(0).agg({1:min,2:min,3:max})
#y.to_csv('y.txt', sep='&', header=False, quoting=csv.QUOTE_NONE, escapechar='&')
rst = x.groupby(0).agg({1:min,2:min,3:max})
with open('rst.txt', 'w') as f:
for idx, row in rst.iterrows():
f.write(idx + '|' + '|'.join([row[1],row[2],row[3]]) + '\n')