如何将Dataframe还原为指定格式数组并正确写入CSV?
解决Dataframe还原特定格式数组并写入CSV的问题
场景还原
初始待处理的CSV内容是:1.0,2.0,1.0,4.0;2.0,3.0,1.0,2.0;1.0,4.0,6.0,3.0,需求是先读取分割成数组,转成Dataframe后,再还原成原格式写入CSV。过程中踩了csv.writer的坑,最后用直接写入字符串的方式搞定。
具体操作步骤
1. 读取分割成数组
先把原始字符串按分号拆成每行,再把每行按逗号拆成列,得到二维数组:
import pandas as pd raw_content = "1.0,2.0,1.0,4.0;2.0,3.0,1.0,2.0;1.0,4.0,6.0,3.0" # 按分号分割成行 row_list = raw_content.split(';') # 每行按逗号分割成列,得到二维数组 data_array = [row.split(',') for row in row_list]
2. 转成Dataframe(按需处理)
如果需要用Dataframe做数据清洗或计算,直接转换即可:
df = pd.DataFrame(data_array) # 若需要数值类型,可做类型转换 df = df.astype(float)
3. 写入CSV的坑与解决
- 踩坑点:用
csv.writer写入时,会把每个字符拆成单独列——因为如果直接传入字符串行,writer会把字符串当成可迭代对象,逐个字符拆分。 - 最优解法:直接拼接成目标格式的字符串写入文件,一步到位:
# 从原始分割的行直接拼接写入 output_str = ';'.join(row_list) + '\n' with open('result.csv', 'w', encoding='utf-8') as f: f.write(output_str) # 要是从Dataframe转回去,这么写 # 先把每行转成逗号分隔的字符串,再用分号连起来 df_output_str = ';'.join(df.astype(str).apply(','.join, axis=1)) + '\n' with open('result_from_df.csv', 'w', encoding='utf-8') as f: f.write(df_output_str)
补充:用csv.writer的正确姿势(如果非要用)
要是坚持用csv.writer,得指定分隔符为分号,而且要传入二维数组(不能传字符串),但这样写出来的是换行分隔行、分号分隔列的标准CSV,和原格式的单行分号分隔行不一样,按需选择:
import csv with open('result_csv_writer.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f, delimiter=';') writer.writerows(data_array)
内容的提问来源于stack exchange,提问作者PradoEagle
相关产品推荐
相关产品推荐

