【问题标题】:nan to empty string pythonnan到空字符串python
【发布时间】:2021-01-01 09:32:09
【问题描述】:

我已经编写了一个将 excel 数据写入 csv 的小型 python 程序,我有一些空单元格在 cvs 中转换为 nan。

我已经能够将 nan 转换为零,但我的要求是为 nan 处理空字符串而不是零。

我尝试使用“替换”,但它不起作用。

这是我写数据的代码

# Open th workbook
data = pd.read_excel(excelName, sheet_name, header=None).values


tables = dict()
for header, start_row, end_row in eval(config['headers']):
    
    table = data[start_row-1:end_row, 1:7]
    tables[header] = table
  
with open(join(CurrentDirectory, inputFile), 'w') as file:
    for header in tables:
        for row in tables[header]:
            row = [date, header] + row.tolist()
            row = [np.nan_to_num(x, 0) for x in row]
            file.write(",".join([str(x) for x in row]))
            file.write("\n")

所以而不是

with open(join(CurrentDirectory, inputFile), 'w') as file:
    for header in tables:
        for row in tables[header]:
            row = [date, header] + row.tolist()
            #row = [np.nan_to_num(x, 0) for x in row]
            row = [np.nan, '' , regex=True]
            file.write(",".join([str(x) for x in row]))
            file.write("\n")

但是我遇到了一个错误,有人可以帮我解决我做错了什么吗?

ERROR: invalid syntax 

这是我当前的 csv 的样子:

A, 2.4, 3212, 0, 343.2234,90
B, 1.4, 0 , 0 , 2839.09, 100

这就是我想要的样子

A,2.4,3212,,343.2234,90
B,1.4,,,2839.09,100

【问题讨论】:

  • I am getting an error 请将错误粘贴到您的问题中
  • df['colname'].fillna('')?
  • ['' if np.isnan(x) else x for x in row]
  • 注意,你应该使用pandas.DataFrame.to_csv
  • 为什么不用pandas函数,比如pd.read_excel()df.to_csv()?这样就可以使用 DataFrame / Series 函数,例如 .isnull.replace(np.nan, '')

标签: python pandas numpy


【解决方案1】:

您可以使用以下内容,而不是使用np.nan_to_num(x, 0)

row = ['' if np.isnan(x) else x for x in row]

如果您也想删除零(如您的第二个示例所示),您可以简单地扩展条件:

row = ['' if np.isnan(x) or x == 0 else x for x in row]

np.isnan

【讨论】:

  • TypeEroor: 'float' 对象不可调用
【解决方案2】:

你问了两个问题。

  1. 如何用空字符串而不是NaN 导出到csv,在cmets 中有回答。只需使用pandas。 也回复了here
  2. 您的无效语法错误来自此行
row = [np.nan, '' , regex=True]

我不确定您要做什么,但您不能将 regex=True 写入 list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 2018-09-29
    • 1970-01-01
    • 2020-03-24
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多