Pandas 基本操作

2019-03-08  本文已影响0人  杜小啥

文件读取

# 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')
上一篇 下一篇

猜你喜欢

热点阅读