分享20个Pandas短小精悍的数据操作
在数据分析和处理领域,Pandas是一个非常常用的Python库,并且也是大多数公司数据科学家必知必会的技能之一。
本文将分享20个Pandas短小精悍的数据操作,从解析多重索引到筛选、排序、重构 DataFrame,以及文本操作和其他常见任务等。
解析多重索引
- 使用
MultiIndex.get_level_values
方法可解析多重索引(例如创建一个包含两个索引级别的DataFrame)。
```python
import pandas as pd
import numpy as np
index = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b']],
names=['level_1', 'level_2'])
df = pd.DataFrame(np.random.rand(4), index=index, columns=['value'])
```
然后使用 get_level_values 方法按索引级别提取信息。例如,提取“level_2”索引级别中的值:
python
level_2_values = df.index.get_level_values('level_2')
筛选数据
- 使用
isin
方法根据多个逻辑过滤数据:
python
df[df['country'].isin(['China', 'United States'])]
- 可通过使用
loc[]
方法选择一组标签进行筛选:
python
df.loc[:, ['A', 'B']] # 选择 “A”和“B”列。
df.loc['a'] # 筛选索引标签为“a”的行(与df.loc[['a']]相同)。
df.loc[('a', 'A')] # 筛选索引标签为“a”和“A”的行。
- 通过在
.query()
方法中传递带有@
符号的局部字符串,我们可以筛选包含在列中的复杂逻辑,例如:
```python
df = pd.DataFrame({
"A": ["foo", "bar", "baz"] * 2,
"B": ["one", "two", "three"] * 2,
"C": ["x", "y"] * 3,
"D": np.random.randn(6),
"E": np.random.randn(6)
})
df.query('C == ["x", "y"] and D > E')
```
排序
- 按特定列进行升序排列:
python
df.sort_values(by='col1')
- 按特定列进行降序排列:
python
df.sort_values(by='col1', ascending=False)
重构数据
- 将宽数据转换为长数据:
python
df.melt(id_vars=['FixedCol1', 'FixedCol2'], value_vars=['VarCol1', 'VarCol2'])
- 对多列下的重复值进行合并:
python
pd.wide_to_long(df, stubnames=['col'], i=['id'], j='variable')
- 将每列中的唯一值转换为新的列,然后移动 DataFrame 的索引来形成时间序列数据:
python
df.pivot(columns='column_to_pivot', values='column_to_value').resample('D')
-
使用
replace()
方法用新的标签替换某列的所有出现:python
df.replace('A|B', 'C', regex=True)
文本操作
-
删除字符串中的所有数字:
python
df['column'] = df['column'].str.replace('\d+', '') -
将字符串 Series 的前三个字符组成一个新列:
python
df['new_col'] = df['old_col'].str[:3]
数据统计
-
使用
value_counts()
方法获取唯一值的集合和它们出现的频率:python
df['column'].value_counts() -
计算一个 DataFrame 的每一列的总计或平均数,应使用:
python
df.sum()
df.mean()
处理缺失值
-
删除包含缺失值的所有行:
python
df.dropna(axis=0) -
删除包含缺失值的所有列:
python
df.dropna(axis=1)
合并数据
-
在两个 pandas 数据帧中根据两列拼接数据:
python
pd.merge(df1, df2, left_on='user_id_commonality', right_on='id', suffixes=('', '_y'))
时间序列
-
将日期列的字符串格式转换为 DateTime 格式:
python
pd.to_datetime(df['date_column'],format='%Y-%m-%d %H:%M:%S') -
计算两个日期之间的时间差,例如:
python
df['time_diff'] = df['end_date'] - df['start_date'] -
设置 DataFrame 的索引(datetime)并按日期(月)重新采样数据:
python
df = df.set_index('datetime').resample('M').mean()
以上是本文分享的20个Pandas短小精悍的操作,这些操作都是大多数数据分析任务中常用的技巧和技能。
示例:
假设有以下数据集:
df = pd.DataFrame({
"A": ["Alice", "Bob"],
"B": [1, 2],
"C": [3, 4],
"D": [5, 6]
})
- 对文本数据进行筛选,筛选出'Alice'的行:
python
df.loc[df['A'] == 'Alice']
- 按'A'列进行排序,降序排列:
python
df.sort_values(by='A', ascending=False)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分享20个Pandas短小精悍的数据操作 - Python技术站