如何分析包含'-'的pandas列[类型错误]
我正在用pandas分析一个电子表格。我有多个工作表在一个文件夹里。为了让这个过程顺利进行,我现在只在一个名为test的电子表格上进行测试。
我想找出最大变化值,但我遇到的问题是,有些单元格里填的是“-”,而不是整数或小数。
我试着写代码来忽略这个“-”,但没有成功,还是出现了类型错误(TypeError)。
下面是我写的代码,供参考:
import os
import pandas as pd
# Define the folder path containing the Excel files
folder_path = r"C:\Users\Documents"
maximum_change = float('-inf')
def update_maximum_values(df):
global maximum_change
if 'change' in df.columns:
maximum_change = max(maximum_change, df['change'].max())
for filename in os.listdir(folder_path):
if filename.endswith('test.xlsx'):
file_path = os.path.join(folder_path, filename)
change_df = pd.read_excel(file_path, sheet_name='Change')
update_maximum_values(change_df)
print(f"File: {filename}")
if 'change' in change_df.columns:
if 'change' in change_df.columns:
print(f"Highest value in 'change': {round(change_df['change'].max(), 2)}")
print()
当所有单元格都填满数字时,这段代码运行得很好。
我也试过问chatGPT,它建议使用NaN(表示缺失值),然后忽略它,但这也没能解决问题,我也没法从那里调试。
2 个回答
0
df.max() 函数在遇到 NaN 值 时是无法正常工作的。你可以用两种不同的方法来解决这个问题。
你可以使用 fillna() 函数,把你的 NaN 值替换成其他任何类型的值,或者你也可以使用 dropna() 函数。这两种方法都能帮助你得到最大值。不过,如果你想保留那些包含 NaN 值的行,最好的选择是使用 fillna()。
4
在对加载的数据集进行任何操作之前,你可以先把目标列中的无效值去掉。
change_df['change'] = pd.to_numeric(change_df['change'], errors='coerce')
这段代码会把这一列中所有无效的值转换成NaN
(表示“不是一个数字”)。此时,如果你调用change_df['change'].max()
,会因为这些NaN
而出错。我们可以在调用max
之前把它们过滤掉,像这样:
change_df['change'].dropna().max()