【问题标题】:Converting a csv file generated in jupyter notebook into list of tuples将 jupyter notebook 中生成的 csv 文件转换为元组列表
【发布时间】:2022-01-01 07:04:44
【问题描述】:

我正在对候选消除算法进行练习。我有一个 JSON 文件,我使用以下代码将其转换为 csv 文件

第 1 步: pdobj=pd.read_json('xxx.json', orient = 'records') print(pdobj)

第 2 步: csvData=pdobj.to_csv(index=False) print(csvData)

但是,当我尝试将此文件转换为元组列表时出现错误,我不想将文件保存在磁盘中然后再次导入。我只想将我直接生成的csv文件转换成元组列表。

这段代码让我犯了错误

with open (csvData) as csvfile:
      examples =[tuple(line) for line in csv.reader(csvfile)]

【问题讨论】:

    标签: python-3.x jupyter-notebook


    【解决方案1】:

    open() 函数将 CSV 文件名作为参数,而不是 CSV 数据本身。因此,无需再次读取 CSV 数据,因为它已经在 csvData 变量中以字符串形式提供。

    要将 CSV 数据转换为元组列表,请使用以下代码。转换部分取自此 Stack thread

    输入 JSON 文件:

    [
      {"Series":"I", "X":10.0, "Y":8.04},
      {"Series":"I", "X":8.0, "Y":6.95},
      {"Series":"I", "X":13.0, "Y":7.58},
      {"Series":"I", "X":9.0, "Y":8.81},
      {"Series":"I", "X":11.0, "Y":8.33}
    ]
    
    # Start of your code
    
    pdobj=pd.read_json('sample_data/anscombe.json', orient = 'records') 
    print(type(pdobj)) 
    
    csvData=pdobj.to_csv(index=False, header=False) # I have skipped the header of the CSV
    print(type(csvData))
    
    # End of your code
    
    
    # Convert the CSV data to a list of tuples
    lot = [tuple(line.split(",")) for line in csvData.split('\n')]
    print(list_of_tuples)
    

    以上代码的输出:

    [('I', '10', '8.04'), ('I', '8', '6.95'), ('I', '13', '7.58'), ('I', '9', '8.81'), ('I', '11', '8.33')]
    

    【讨论】:

    • 您好,感谢您的及时答复。但我想在元组中拆分成单独的字符串而不是单个字符串。输出必须如下所示 [('I',10','8.04',), ('I','8','6'.'95',), ('I','13',' 7'.'58',), ('I','9','8.81',), ('I','11','8.33',)] 不是这样的 [('I,10,8.04 ',), ('I,8,6.95',), ('I,13,7.58',), ('I,9,8.81',), ('I,11,8.33',)]跨度>
    • 嗨@JChan。我已根据您的要求更新了我的答案。如果有帮助,请考虑接受答案(通过单击“勾号”)。
    • 嗨,一切都很好,除了在使用代码时我在最后一行得到 /r 这里的例子 >> [('med', 'med', 'med', 'high ', 'high', 'med', 'med', 'med', 'True\r'), ('med', 'high', 'med', 'low', 'high', 'med', 'med', 'high', 'True\r')
    • 您好,您可以为此问题创建一个新问题吗?因为根据堆栈溢出指南,必须通过不同的问题来解决不同的要求。在创建新问题之前,如果您的需求已经有了解决方案,请务必检查 Stack。否则,您的问题将作为旧问题的副本而关闭。
    • 这个堆栈线程应该会有所帮助:stackoverflow.com/questions/26790547/…