数据小站
数据科学成长之路

pandas库的操作

df的内置函数
0. index 索引与数据选择
快速访问 .at .iat .loc .iloc
df.at[index的值, 'ColumnName']
df.iat[第几行, columnIndex]
df.iat[1,1] = 2
示例:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e'] },index=[2,5,6,8,7])
a = df.at[2,'A'] => 等价于 df.loc[2].at['A'] index 为 index的值
b = df.iat[2,0] => 等价于 df.iloc[a].iat[0] index 为 所在的行,和index值无关
c = df.loc[2].iat[1]
d = df.loc[2].at['A']
e = df.iloc[2].at['A']
f = df.iloc[2].iat[0]
print(a,b,c,d,e,f)
切片示例:
df = pd.DataFrame( [{'a': 1, 'b': 2, 'c': 3, 'd': 4}, {'a': 100, 'b': 200, 'c': 300, 'd': 400}, {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }])
df.iloc[[0]]
df.iloc[[0, 1]]
df.iloc[:3]
df.iloc[[True, False, True]]
df.iloc[lambda x: x.index % 2 == 0]
df.iloc[[0, 2], [1, 3]]
df.iloc[1:3, 0:3]
df.iloc[:, [True, False, True, False]]
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],index=['cobra', 'viper', 'sidewinder'],columns=['max_speed', 'shield'])
df.loc['viper']
df.loc[['viper', 'sidewinder']]
df.loc['cobra', 'shield']
df.loc[[False, False, True]]
df.loc[df['shield'] > 6]
df.loc[['viper', 'sidewinder'], ['shield']] = 50
df.loc[:, 'max_speed'] = 30
df.loc[df['shield'] > 35] = 0
当index为integer labels 且为升序时 ,可以 df.loc[7:9] 否则报错
层次索引
set_index reset_index unstack stack
swaplevel 索引次序调换
droplevel
多维索引切片示例:
tuples = [('cobra', 'mark i'), ('cobra', 'mark ii'),('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),('viper', 'mark ii'), ('viper', 'mark iii')]
index = pd.MultiIndex.from_tuples(tuples)
values = [[12, 2], [0, 4], [10, 20],[1, 4], [7, 1], [16, 36]]
df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)
df.loc['cobra']
df.loc[('cobra', 'mark ii')]
df.loc['cobra', 'mark i']
df.loc[[('cobra', 'mark ii')]]
df.loc[('cobra', 'mark i'), 'shield']
df.loc[('cobra', 'mark i'):'viper']
df.loc[('cobra', 'mark i'):('viper', 'mark ii')]
1. df维度的操作
df.explode 展开列表
df.explode('ListColumn')
示例:
data = { 'A': ['a', 'b', 'c'], 'B': [[1, 2], [3, 4], [5, 6]] }
df = pd.DataFrame(data)
result = df.explode('B')
print(result)
df.query
用于通过布尔表达式来过滤 DataFrame 的行。它提供了一种直观且方便的方法来选择满足特定条件的行,类似于 SQL 中的 WHERE 子句。
expr 是一个字符串,表示要查询的条件表达式。expr 参数中使用任何有效的 Python 表达式,包括逻辑运算符(如 and、or)、算术运算符(如 +、-、*、/)、比较运算符(如 >、<、==)、
示例:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': ['a', 'b', 'c', 'd', 'e']})
result = df.query('A > 2')
df.mask
DataFrame.mask(cond, other=np.nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False)
cond:一个布尔数组或者一个可调用对象,用于指定要遮罩的条件。
other:用于替换满足条件的元素的值,默认为 np.nan。
示例:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': [6, 7, 8, 9, 10]})
result = df.mask(df % 2 == 0, other=np.nan)
df.pivot 透视表
df.pivot(index='IndexColumn', columns='ColumnToPivot', values='ValueColumn')
df.nlargest .nsmallest
返回指定cloumn上最大/小的数据
示例:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': [6, 7, 8, 9, 10]})
print(df.nlargest(5, 'A'))
print(df.nsmallest(5, 'A'))
df.sort_index / sort_values rank 排名排序
2. 对df的值、列 操作
df.replace 字符替换
df.replace({'OldValue': 'NewValue'})
.apply
DataFrame的apply方法,可以将func函数应用到由各列或行所形成的一维数 组上,返回一个series。
示例:
df = pd.DataFrame([{'a': 1, 'b': 2, 'c': 3, 'd': 4}, {'a': 100, 'b': 200, 'c': 300, 'd': 400},{'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000}])
print(df.apply(sum))
df['DoubleAge'] = df['Age'].apply(lambda x: x * 2)
.applymap()
是将func函数应用到dataframe的每个元素上,元素级的计算。
.map
是Series对象的元素级函数计算
df['Status'] = df['Status'].map({'Active': 1, 'Inactive': 0})
.str 字符串操作
df['Name'].str.upper()
.str.contains 模糊匹配
df[df['Column'].str.contains('pattern', case=False, na=False)]
3. 统计计算
.value_counts
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': [6, 7, 8, 9, 10]})
print(df['A'].value_counts())
.rolling 滑动窗口
df['Column'].rolling(window=3).mean()
.sum mean max min
.std 样本标准差 .vat 样本方差
.corr 相关系数矩阵
.corrwith() DataFrame的corrwith方法,可以计算其列或行跟另一个 Series或DataFrame之间的相关系数
4. 数据处理 缺失值 过滤 重复项
.isin
返回索引对应的布尔值
df['Name'].isin(['Alice', 'Bob'])
.duplicated drop_duplicates
.duplicated 会返回一个布尔数组,指示 DataFrame 中每一行是否是重复的。
示例 :
df = pd.DataFrame({'A': [1, 2, 2, 3, 4],'B': ['b', 'b', 'b', 'c', 'd']})
duplicated_rows = df.duplicated(['B'],keep='last')
.drop_duplicates
.drop_duplicates (subset=['Name'], keep='first')
5. 分组分相操作 groupby cut
.groupby 分组功能
.groupby().rank 分组排名
df['group_rank'] = df.groupby('group_col')['value_col'].rank()
.groupby().nunique 去重统计
df = data.groupby('hs7')['bossid'].nunique().reset_index(name='hs_boss')
.groupby().agg 分组聚合
grouped = dt.groupby(['ctfb','is_gys']).agg({'acc_all': ['count', 'sum'],'all_cost':'sum'}).unstack().reset_index()
.groupby().transform
使用groupby和transform在组内进行操作,并将结果广播到原始DataFrame。
示例: 计算每个年龄组的平均工资。
df['MeanSalaryByAge'] = df.groupby('Age')['Salary'].transform('mean')
.cut qcut 分箱操作
bins =[-np.inf,0,10,20,np.inf] 左开右闭区间
dt['group'] = pd.cut(dt['acc'], bins=bins, labels = bin_name)
pd.values_count( pd.cut(data, bins , labels = bin_name) )
interval_df = dt[dt['group'] == pd.Interval(5, 10, closed='right')] 选取区间的内容 对应左开右闭
pd.qcut(data, 4) 根据样本分位点进行切分
pd.qcut(data, [0,0.1,0.5,0.9,1]) 根据样本分位点进行切分
one-hot 编码
pd.get_dummies( df[‘key’], prefix=)
get_dummies 与 cut的有个很实用的技巧
pd.get_dummies( pd.cut(data, bins)) ,可以将 各cut的分隔下,转成透视表的形式。
7. 数据分析
df.fillna() 缺失值填充
df.isnull().any() 检测缺失值
df.a.value_counts() / len(df) df.a列中每个值所占的占比
df.describe()
df.corr() 相关系数
merged_df = merged_df.append(df.iloc[-1], ignore_index=True) 添加一行
8. 内置方法
.iterrows 迭代行
for name, row in df.iterrows():
9. 时间序列
产生时序间隔的列表
date_range = pd.date_range(start=formatted_date, end=yest_day, freq='D')
df = pd.DataFrame(date_range)
df = pd.DataFrame(index = date_range)
df = pd.DataFrame(data = {'ds':date_range})
将字符串转换成pd的时间序列
pd.to_datetime() 将字符串转换成时间格式
p3_dt_13['contract_start'] = pd.to_datetime(p3_dt_13['contract_start'])
时间序列的字段,可以设置为index索引,时间序列的重采样 .resample()
p3_dt_13_qy = p3_dt_13.set_index('contract_start').resample('D').sum()
时间序列格式转换为字符串 用.dt方法转换
p3_dt_13_log['ds'] = p3_dt_13_log['ds'].dt.strftime('%Y-%m-%d')
重采样
df.resample('D').sum()
赞(0) 打赏
未经允许不得转载:技术文档分享 » pandas库的操作

评论 抢沙发