2024
12/17
14:51
pandas 常用命令
#引入 pandas
import pandas as pd
# 1.创建pandas数据表
data = {
'Name': ['Alice', 'Bob', 'Charlie', None, 'Edward'],
'Age': [25, 30, 35, 40, None]
}
df = pd.DataFrame(data)
## 创建示例CSV文件
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]
}
df = pd.DataFrame(data)
df.to_csv('example.csv', index=False)
# 读取CSV文件
df = pd.read_csv('example.csv')
print(df)
知识点解释:
read_csv(): 从CSV文件读取数据到DataFrame。
# 写入CSV文件
数据集:
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]
}
df = pd.DataFrame(data)
print(df)
练习: 将DataFrame写入CSV文件“output.csv”。
参考答案:
df.to_csv('output.csv', index=False)
# 读取excel同理
df.to_excel('example.xlsx', index=False)
# 根据条件更改值
df.loc[df['Score'] > 80, 'Score'] = 'PASS'
# 垂直合并数据
stacked_df = pd.concat([df1, df2], axis=0, ignore_index=True)
print(stacked_df)
知识点解释:
concat():按行堆叠数据框。
# 拆分数据集
练习: 将数据集按索引拆分为训练集 (80%) 和测试集 (20%)。
参考答案:
train_df = df.sample(frac=0.8, random_state=1)
test_df = df.drop(train_df.index)
1.删除有任何缺失值的行
df_cleaned = df.dropna()
inplace=True: 修改原 DataFrame
2.将缺失值替换为平均值
# 1.先得到平均值
age_mean = df['Age'].mean()
# 浅复制(df.copy(deep=True) 为深层复制)
df_filled = df.copy()
# 完成全局替换(fillna 填补缺失值)
df_filled['Age'] = df_filled['Age'].fillna(age_mean)
3.删除重复行
df_no_duplicates = df.drop_duplicates()4.重命名列
# 使用 rename() 方法生成一个新的 DataFrame
df_renamed = df.rename(columns={'FirstName': 'Name'})
5.更改数据类型/去除空格/字符替换
# 将 "ID" 列转换为整数类型
df['ID'] = df['ID'].astype(int)
# 删除 Name 列中的多余空格
df['Name'] = df['Name'].str.strip()
# 删除列
df.drop(columns=['Country'], inplace=True)
#将下划线替换成空格
df['Product'] = df['Product'].str.replace('_', ' ')
# 拼接数据框
df_combined = pd.concat([df1, df2], ignore_index=True)
# 使用函数对数据进行批处理
练习: 按年龄列进行升序排序。
参考答案:
df_sorted = df.sort_values(by='Age')
print(df_sorted)
data = {
'Email': ['john.doe@example.com', 'jane.doe@domain.com']
}
df = pd.DataFrame(data)
print(df)
练习: 提取邮箱的用户名部分。
参考答案:
df['Username'] = df['Email'].apply(lambda x: x.split('@')[0])
print(df)
# 拆分列
练习: 将"FullName"拆分为"FirstName"和"LastName"两列。
参考答案:
df[['FirstName', 'LastName']] = df['FullName'].str.split(' ', expand=True)
#条件筛选
练习: 筛选出年龄大于30的行。
参考答案:
filtered_df = df[df['Age'] > 30]
print(filtered_df)
# 升序降序
练习: 按年龄列进行升序排序。
参考答案:
df_sorted = df.sort_values(by='Age')
print(df_sorted)
# 改列顺序
练习: 将列顺序调整为 Age在前,Name在后。
参考答案:
df = df[['Age', 'Name']]
print(df)
# 聚合数据分组
练习: 计算每个部门的平均工资。
参考答案:
average_salary = df.groupby('Department')['Salary'].mean().reset_index()
print(average_salary)
# 转换日期
练习: 将"Date"列转换为 datetime 类型。
参考答案:
df['Date'] = pd.to_datetime(df['Date'])
print(df)
# 增加新列
练习: 增加一个新列"UnitPrice",其值为 Total / Quantity。
参考答案:
df['UnitPrice'] = df['Total'] / df['Quantity']
# 两列求和
练习: 计算列“A”和列“B”的总和。
参考答案:
df['A+B'] = df['A'] + df['B']
print(df)
# 最加一行新行
new_row = pd.DataFrame([[35, 'Charlie']], columns=['Age', 'Name'])
df = pd.concat([df, new_row], ignore_index=True)
print(df)
# 行方向合并数据集
练习: 将两个数据集行方向上连接。
参考答案:
df_combined = pd.concat([df1, df2], ignore_index=True)
print(df_combined)
# 值替换
练习: 将所有“Category”列中的“Short”替换为“Low”。
参考答案:
df['Category'] = df['Category'].replace('Short', 'Low')
print(df)
# 去重列表获取
unique_items = df['Items'].unique()
print(unique_items)
知识点解释:
unique(): 返回去重后的值列表。
其他刁钻的,不常用到的
# 向前填充数据
df['Temperature'].fillna(method='ffill', inplace=True)
print(df)
知识点解释:
ffill: 前向填充,适用于时间序列数据。
# 向后填充数据
df['Temperature'].fillna(method='bfill', inplace=True)
print(df)
bfill: 后向填充,适用于时间序列数据。
# 数据截取前三行
subset_df = df.head(3)
print(subset_df)
# 统计每个类别的值
grouped_df = df.groupby('Category')['Values'].sum().reset_index()
print(grouped_df)
知识点解释:
groupby() 和 sum(): 按关键列分组后求和。
# 数据透视表
pivot_table = df.pivot(columns='Month', values='Sales')
print(pivot_table)
知识点解释:
pivot(): 重塑 DataFrame 以创建数据透视表。
真的真的不太会用到的
# 标准化:
Zscore 标准化:将数据转换为标准正态分布。
# 归一化
练习: 将 Income 列归一化到 [0, 1] 范围。
参考答案:
df['Income_normalized'] = (df['Income'] df['Income'].min()) / (df['Income'].max() df['Income'].min())
print(df)
# 分类
练习: 将 Score 列分为“Low”,“Medium”和“High”三个类别。
参考答案:
bins = [0, 59, 79, 100]
labels = ['Low', 'Medium', 'High']
df['Category'] = pd.cut(df['Score'], bins=bins, labels=labels)
print(df)