【问题标题】:how to write pandas data frame into csv file? How to remove list array braces ([]) from final dictionary?如何将熊猫数据框写入csv文件?如何从最终字典中删除列表数组大括号([])?
【发布时间】:2020-05-12 14:28:50
【问题描述】:

如何将最终的熊猫数据帧值写入管道分隔符 csv 文件。当前最终数据框列包含数组 ([]) 值列表。如何从字典列表值中删除列表数组大括号([])以及如何使用逗号分隔值和管道分隔符(|)写入最终 csv 文件 csv 文件和行数据不应使用"" 换行价值观。

new_ids_simple = {0: {'d_ph_num': ['9812345670','9123456200'], 'r_vid': ['DQR695919','DQR695921','DQR696123','DQR69124','DQR695763','DQR695623','DQR69125','DQR696234','DQR695128'], 'unique_cust_id': 202000001}, 1: {'d_ph_num': ['9123456914'], 'r_vid': ['DQR626679'], 'unique_cust_id': 202000002}, 2: {'d_ph_num': [''], 'r_vid': ['DQR040140'], 'unique_cust_id': 202000003}, 3: {'d_ph_num': ['9123456174'], 'r_vid': ['DQR041822'], 'unique_cust_id': 202000004}}

print(new_ids_simple)

mdf = pd.DataFrame.from_dict(new_ids_simple,orient='index')
mdf['d_ph_num'] = mdf['d_ph_num'].apply(pd.unique)
mdf['r_vid'] = mdf['r_vid'].apply(pd.unique)

mdf.to_csv('/data/dmart/output/p_data1.csv', sep="|" ,index=False)

使用以下数据集创建的损坏的 csv 文件,格式不正确:

d_ph_num|r_vid|u_id
['9812345670' '9123456200']|"['DQR695919' 'DQR695921' 'DQR696123' 'DQR69124' 'DQR695763' 'DQR695623' 'DQR69125' 
'DQR696234' 'DQR695128']"|202000001
['9123456914']|['DQR626679']|202000002
[nan]|['DQR040140']|202000003
['9123456174']|['DQR041822']|202000004

最终预期的 csv 文件格式数据:

d_ph_num|r_vid|u_id
('9812345670','9123456200')|('DQR695919','DQR695921','DQR696123','DQR69124','DQR695763','DQR695623','DQR69125','DQR696234','DQR695128')|202000001
('9123456914')|('DQR626679')|202000002
|('DQR040140')|202000003
('9123456174')|('DQR041822')|202000004

【问题讨论】:

  • 您应该使示例完全可重现,以便更容易检查问题并找到解决方案。现在,获取您正在显示的数据集并不直接,至少如果我使用您显示的数据框,我不会获得相同的输出
  • @Jalo 我用示例输入数据集重新创建了。现在尝试创建 csv 文件。

标签: python python-3.x pandas csv data-science


【解决方案1】:

您遇到的问题是由于在应用 pd.unique 函数时转换为数组所致。由于您想用括号显示值,我会将值转换回元组,然后再将数据帧发送到 csv 文件(如果方括号足够,则为列表):

mdf['d_ph_num'] = mdf['d_ph_num'].apply(tuple)
mdf['r_vid'] = mdf['r_vid'].apply(tuple)
mdf.to_csv('/data/dmart/output/p_data1.csv', sep="|" ,index=False)

请注意,这种方法不适用于非常大的数据集,因为您会将所有值转换为数组,然后再转换回列表或元组。如果是这种情况,我会考虑创建一个自定义函数来重现 pd.unique 的行为并将值直接放入元组中。

【讨论】:

  • 1) 我有大量数据集来创建独特的客户。 2)我们将加载到数据库中的最终 csv 文件,因此数据不应滑入多行。
  • 您在一个问题中提出了太多问题,这不是本网站的工作方式。此外,您似乎希望有人为您解决整个作业,但这也不是这样的。我为您提供了删除方括号和错误换行符的解决方案,但我不会花时间修复您的整个作业
  • 您要求的确切行为超出了 pandas.to_csv 行为的范围。如果您的代码规范非常严格,我建议您开始制作自己的代码,手动创建 csv 文件并向其发送数据
【解决方案2】:

python panda 数据框从数组到字符串的转换(数据框内):

mdf = pd.DataFrame.from_dict(new_ids_simple,orient='index')
mdf['d_ph_num'] = mdf['d_ph_num'].apply(pd.unique)
mdf['r_vid'] = mdf['r_vid'].apply(pd.unique)

#To convert from an array to a string (inside the data frame)
mdf['r_vid'] = mdf['r_vid'].apply(', '.join)

#To convert from a float number type array to string 
mdf['d_ph_nm'] = [','.join(map(str, l)) for l in mdf['d_ph_nm']]

mdf.to_csv('/data/dmart/output/p_data1.csv', sep="|" ,index=False)df.col.tolist()

输出 csv 文件 p_data1.csv:

d_ph_num|r_vid|u_id
9812345670,9123456200|DQR695919,DQR695921,DQR696123,DQR69124,DQR695763,DQR695623,DQR69125,DQR696234,DQR695128|202000001
9123456914|DQR626679|202000002
|DQR040140|202000003
9123456174|DQR041822|202000004

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 2020-08-23
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多