python数据分析-数据清洗操作代码

0.中文显示

matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文显示
# plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False  # 解决减号显示问题

1.填充零值

只填充两列

df_filled = df.fillna(0, subset=['列名1', '列名2'])

全部填充

df_filled = df.fillna(0)

2.删除某一列

# 删除列
df = df.drop('列名', axis=1)
#多删除几列
df = df.drop(['列1','列2'],axis=1)
# 删除第一列
df = df.drop(df.columns[0], axis=1)

3.读取、保存excel表格

df = pd.read_excel('name.xlsx')
df = pd.read_csv('name.csv')

df.to_excel('savename.xlsx')
df.to_csv('savename.csv')
  1. 读取列的名称
df.columns

#print all and dawing pictures
for column in outdf.columns[2:]:
    plt.figure(figsize=(10, 5))
    plt.plot(df['环号'], outdf[column])
    plt.title(f'{column}')
    plt.xlabel('环号')
    plt.ylabel(column)
    plt.show()
  1. plt.figure 图中的字体大小修改
# 添加标题和轴标签,并设置字体大小为 14
plt.title('Title', fontsize=14)
plt.xlabel('X Label', fontsize=14)
plt.ylabel('Y Label', fontsize=14)

plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
#旋转角度
plt.xticks(rotation=45)
plt.yticks(rotation=90)
  1. 拼接两个表格

pd.concat函数在默认情况下会自动合并相同的列

# 使用 concat 函数按照索引拼接表格
result = pd.concat([df1, df2])
# 使用 concat 函数按照索引拼接多个表格
result = pd.concat([df1, df2, df3])

# 使用 merge 函数根据 Key 列拼接表格
result = pd.merge(df1, df2, on='Key')
# 使用 merge 函数根据 Key 列拼接多个表格
result = pd.merge(pd.merge(df1, df2, on='Key'), df3, on='Key')

注意一下拼写错误:!

AttributeError: module 'pandas' has no attribute 'contact'
  1. 计算df的平均值、最大值、最小值
# 计算每一列的平均值
mean_values = df.mean()
print("平均值:")
print(mean_values)

# 计算每一列的最大值
max_values = df.max()
print("最大值:")
print(max_values)

# 计算每一列的最小值
min_values = df.min()
print("最小值:")
print(min_values)
  1. 箱型图的绘制
#小提琴图
sns.violinplot(data=df, x='A')
#箱型图
sns.boxplot(data=df, x='A')
  1. 皮尔逊相关系数
# 计算相关系数
correlation_matrix = df.corr()

# 绘制皮尔逊相关系数热力图
plt.figure(figsize=(50,40))
sns.heatmap(correlation_matrix, annot=True, cmap='RdYlGn')
plt.title('Pearson Correlation Coefficients')
plt.show()
  1. 按环号进行分组,计算中位数,并合并其他列的值
import pandas as pd
import numpy as np

# 创建示例 DataFrame
df = pd.DataFrame({'环号': [1, 1, 2, 2, 3, 3],
                   '滚动角': [10, 20, 30, 40, 50, 60],
                   '前盾体俯仰角': [100, 200, 300, 400, 500, 600],
                   '前盾水平偏差': [1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
                   '前盾垂直偏差': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]})

# 按环号进行分组,计算中位数,并合并其他列的值
df_merged = df.groupby('环号').median().reset_index()

print(df_merged)

output:
   环号  滚动角  前盾体俯仰角  前盾水平偏差  前盾垂直偏差
0   1   15     150      1.5      0.15
1   2   35     350      3.5      0.35
2   3   55     550      5.5      0.55

采用上0.25位数进行代替:

df_merged = df.groupby('环号').apply(lambda x: x.fillna(x.quantile(0.25))).reset_index(level=0, drop=True).reset_index()

采用非零值的平均数代替:

# 按环号分组并计算每列的非零值平均数
nonzero_means = df.replace(0, np.nan).groupby('环号').mean()

# 重置索引
nonzero_means = nonzero_means.reset_index()

# 合并环号和非零值平均数到一个新的 DataFrame
df_merged = pd.merge(df['环号'].drop_duplicates(), nonzero_means, on='环号')

df_merged.to_excel('依据环号合并后用非零平均数代替的值.xlsx')
  1. df中的空缺值处理
# 删除包含缺失值的行
df.dropna(axis=0, inplace=True)
# 删除包含缺失值的列
df.dropna(axis=1, inplace=True)

# 用特定值填充缺失值
df.fillna(value=0, inplace=True)
# 用前一个非缺失值填充缺失值
df.fillna(method='ffill', inplace=True)
# 用后一个非缺失值填充缺失值
df.fillna(method='bfill', inplace=True)
# 用均值填充缺失值
df.fillna(df.mean(), inplace=True)
# 用中位数填充缺失值
df.fillna(df.median(), inplace=True)

# 使用线性插值填充缺失值
df.interpolate(method='linear', inplace=True)
# 使用多项式插值填充缺失值
df.interpolate(method='polynomial', order=2, inplace=True)

12.控制pd的显示格式

# 设置 Pandas 的显示选项,控制浮点数的显示格式
pd.set_option('display.float_format', '{:.2f}'.format)