利用 pandas 库对数据进行简单处理的记录

安装并导入 pandas 库

安装:pip install pandas

1
import pandas as pd

从 csv 文件读取并添加自定义表头

1
2
3
4
5
6
def read_csv_file(csv):
try:
with open(csv, 'r') as f:
return pd.read_csv(f, header=None, names=['a', 'b', 'c', 'd', 'e', 'f'])
except FileNotFoundError:
print(f"Error: File '{csv}' not found.")

将某列数据转换为数字格式,并将无法转换的置0

1
2
3
4
5
df = read_csv_file(csv)
# 将 a 列的字符串转换为数字,无法转换的会重置为 NaN
df['a'] = pd.to_numeric(df['a'], errors='coerce')
# 将 NaN 值填充为 0
df['a'] = df['a'].fillna(0)

将两张相同格式的数据合并

如需要将 table 1

name 1st
a 61.31
b 62.27
c 63.58

与 table 2

name 2nd
a 61.24
b 63.39
c 63.66

合并为

name 1st 2nd
a 61.31 61.24
b 62.27 63.39
c 63.58 63.66
1
2
3
df1 = read_csv_file(csv1)
df2 = read_csv_file(csv2)
df = pd.concat([df1, df2], axis=1)

判断第二次的值是否比第一次小或不大于10%

此时需要用到 numpy 库的 where 函数,

pip install numpy

numpy.where(condition, x, y)

  • condition :表示条件的布尔数组或条件表达式。
  • x :满足条件时的返回值,可以是数组或标量。
  • y :不满足条件时的返回值,可以是数组或标量。
1
2
3
4
5
import numpy as np

diff = df['2nd'].astype(float) - df['1st'].astype(float)
# 当 1st 值为 0 不能除时赋值为 1
df['percent'] = np.where(df['1st'].astype(float) == 0,round(diff * 100,2),round((diff / df['1st'].astype(float)) * 100,2))

将数据存为本地 xlsx 时为特定行添加颜色

此时需要用到 openpyxl 库

pip install openpyxl

1
2
3
4
5
6
7
8
9
# 当满足条件时高亮此行
def highlight_false(row):
color = 'yellow' if row['percent'] >= 10 else 'white'
return ['background-color: %s' % color] * len(row)

# 应用样式
styled_df = df.style.apply(highlight_false, axis=1)
# 保存带有样式的 DataFrame 为 Excel文件
styled_df.to_excel(f'reslute.xlsx', engine='openpyxl', index=False)