Fork me on GitHub

pandas技巧7

用于记录pandas中各种cao气的操作

  • 指定列属性

  • 读取文件的时候首行不当做属性值

  • 指定分隔符和属性(names)

  • 查看DF数据的各种信息

  • groupby机制等

文件读取

1
2
3
4
import pandas as pd

names = ['age', 'city', 'size', 'gender']
df = pd.read_table(path, header=None, seq="|", names=names)

查看各种信息

1
2
3
4
5
6
7
8
9
10
df.describe()
df.dtype
df.shape
df.head()
df.province.value_counts()
df.province.unique() # 统计属性中不同的元素
df.province.nunique() # 统计属性中不同元素的个数

df.age.plot(kind='hist')
df.age.value_counts().plot(kind='bar')

属性操作

1
2
3
4
5
6
7
8
9
10
11
df ['information'] = df['age'] + df['gender']   # 生成information属性
df.rename(columns = {'old_name': 'new_name'}, inplace=True) # 直接指定

new_columns = ['new_age', 'new_city', 'new_size']
df.columns = new_columns # 使用上面的新属性名

df.columns = df.columns.str.replace(' ', '_') # 将原来的属性的_用空格代替

# 删除属性
df.drop('age', axis=1, inplace=Ture)
df.drop(['city', 'state'], axis=1, inplace=True)

排序sort

sort_values主要是对某个属性中出现的各个元素进行排序,默认是升序,字母是a-z

1
2
3
4
5
6
df.age.sort_values()   #  默认是升序,可以修改ascending=False
df['age'].sort_values()
df.sort_values('age', ascending=False)

# 多个属性的排序:先排序第一个,再第二个
df.sort_values(['age', 'state'])

过滤相关

1
2
3
4
5
6
df[df.age > 20 & df.state == 'guangdong']
df[df.state.isin(['guangdong', 'hunan', 'hubei'])]
# df.state.isin(['guangdong', 'hunan', 'hubei']) 结果是布尔值

df[df.age > 20, 'state']
df[df.age >20]['state']

axis相关

1
2
3
4
5
6
7
8
df.drop('age', axis=1)   # 列上操作
df.drop(2, axis=0) # 行上操作

df.mean(axis=0)
df.mean(axis='index')

df.mean(axis=1)
df.mean(axis='columns')

字符串方法

1
2
3
df.name.str.upper()  # 全部变成大写
df[df.name.str.contains('xiaoming')]
df.description.str.replace('[\[\]]', '') # 将[]去掉

改变数据类型

1
2
3
df['age'] = df.age.astype(float)
df = pd.read_csv(path, dtype={'age': float}) # 创建过程中指定数据类型
df.dtype

groupby 机制

1
2
df.groupby('province').size.agg(['count', 'mean', 'min'])  # 传入多个参数
df.groupby('province').mean().plot(kind='bar') # 作图

缺失值处理

1
2
3
4
5
6
df.isnulll()
df.notnull()
df[df.city.isnull()]
df.dropna(subset=['age', 'city', 'province'], how='any')

pd.Series([True, False, True]).sum() # 统计出现T的次数

index相关

1
2
3
4
df.set_index('province', inplace=True)  # 将某个属性变成索引index

df.index.name='country'
df.reset_index(inplace=True)

处理离散数据

怎么将性别男女变成1/0

1
df['new_sex'] = df.sex.map({'female':0, 'male':1})

日期和时间

1
2
3
4
5
6
7
8
df['time'] = pd.to_datetime(df.time)
df.time.dt.hour(dayofyear,weekday_name)

ts = pd.to_datetime('11/12/2019') # 格式化时间
df.loc[df.time >= ts, :].head() # 选择时间位于ts之后的

(df.time.max() - df.time.min()).days # 相隔多少天
df.Year.value_counts.sort_index().plot() # 作图

pandas中记录的显示

1
2
3
4
5
6
pd.get_option('display.max_rows')   # 查看显示多少条
pd.set_option('display.max_rows',None) # 全部显示
pd.reset_option('display.max_rows') # 复原显示

pd.set_option('display.max_colwidth',1000) # DF中数据显示的最大值
pd.set_option('display.float-format', '{:, }'.foramt) # 将数字变成每3位一个逗号的形式

本文标题:pandas技巧7

发布时间:2019年10月16日 - 20:10

原始链接:http://www.renpeter.cn/2019/10/16/pandas%E6%8A%80%E5%B7%A77.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea