如何将 Pandas DataFrame 写入 CSV,并在不添加逗号转义字符的情况下,使用引用的字符串和未更改的整数/空单元格?

问题描述 投票:0回答:1

我正在编写一个 Python 脚本来将 DataFrame 写入 CSV 文件。我的目标是:

  • 将所有字符串值括在双引号 (") 中。
  • 保持数值不变(无引号)。
  • 保留空单元格不变。

这是我当前使用的代码:

import pandas as pd
import csv

# Sample DataFrame
data = {'col1': ['hello, world', 'test', '', None], 'col2': [123, 456, 789, None]}
report_df = pd.DataFrame(data)

# Add quotes only to non-numeric, non-empty cells
for col in report_df.select_dtypes(include=['object', 'bool']).columns:
    report_df[col] = report_df[col].apply(
        lambda x: f'"{x}"' if pd.notnull(x) and str(x).strip() != "" else ""
    )

# Write to CSV without quoting numeric columns
report_df.to_csv("output.csv", index=False, quoting=csv.QUOTE_NONE, escapechar=" ")

我面临的问题是,当字符串包含逗号(例如,“hello, world”)时,CSV 编写器会在逗号之前添加转义字符 (),从而产生如下输出:

"hello\, world",123
"test",456
,789
,

我想避免这种行为,并让输出直接在带引号的字符串中包含逗号,如下所示:

"hello, world",123
"test",456
,789
,

我尝试过csv.QUOTE_MINIMAL:当我设置quoting=csv.QUOTE_MINIMAL时,只在包含逗号的字符串周围添加引号,其他字符串不加引号,这不符合我的要求。

自定义逻辑问题:将 csv.QUOTE_MINIMAL 与我的自定义逻辑组合以引用所有字符串时,生成的输出具有额外的双引号,例如:

""""hello, world""""
""""test""""
,

我需要一个解决方案:

  • 一致地引用所有字符串值,包括带逗号的字符串值,而不添加转义字符或额外的引号。
  • 保持数值和空单元格不变。
python pandas dataframe csv export-to-csv
1个回答
0
投票

您可以使用

escapechar="\\"

import pandas as pd
import csv

data = {'col1': ['hello, world', 'test', '', None], 'col2': [123, 456, 789, None]}
report_df = pd.DataFrame(data)

report_df.to_csv(
    "output.csv", 
    index=False, 
    quoting=csv.QUOTE_MINIMAL,
    escapechar="\\",  
    float_format='%.0f'  
)

files.download('output.csv')

CSV 输出

col1,col2
"hello, world",123
test,456
,789
,
© www.soinside.com 2019 - 2024. All rights reserved.