我正在编写一个 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""""
,
我需要一个解决方案:
您可以使用
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
,