【问题标题】:Writing multiple lists of different lengths to same rows in Python with each list into a single cell在 Python 中将多个不同长度的列表写入同一行,每个列表写入一个单元格
【发布时间】:2020-06-08 04:47:51
【问题描述】:

我有一些大数据文件要解析。每个文件都有某些标签的重复,但只有一种情况。例如,每个文件都有名称和日期的父文件,它们在每个数据块中只显示一次,但有许多子文件,如专利引用、非专利引用和分类。

因此,我通过查找每三个孩子的所有案例进行解析,并将每个文件中父母的每次迭代存储到单独的列表中。问题是孩子的长度总是不同的,我想把它们都写在 CSV 文件的一行上。

例如,对于我的列表输入的文件中的一次迭代,如下所示:

Name = [Jon]
Date = [1985]
Patcit = [1, 2, 3]
Npatcit = [4, 5, 6, 7, 8]
Class = [9, 10]

这是我的第二次迭代,传入列表

Name = [Nikhil]
Date = [1988]
Patcit = [1, 2, 3]
Npatcit = [4, 5, 6, 7]
Class = [9, 10, 11, 12, 13]

这是我的第三次迭代,传入列表

Name = [Neetha]
Date = [1986]
Patcit = [1, 2]
Npatcit = [4, 5]
Class = [9, 10, 11, 12]

我希望写入 CSV 文件的输出如下所示:

Name     Date     Patcit   Npatcit     Class
Jon      1985     1,2,3   4,5,6,7,8    9,10
Nikhil   1988     1,2,3    4,5,6,7   9,10,11,12,13               
Neetha   1986      1,2       4,5      9,10,11,12

(在下一行重复下一个名称和日期迭代)

【问题讨论】:

  • 您分享的数据,是否在列表中?有点不清楚你是否有 Name,Date,Patcit,... 独立存在,或者像[Name, Date, Patcit, ...]
  • 姓名、日期、Patcit ...都是单独的列表。
  • 酷。你介意用更多的值填充列表,你的结果 csv 文件输出说三行。它让 IMO 可以更好地了解您的需求。
  • 完成。显示迭代
  • 创建字符串","join([1, 2, 3])并放入单个单元格有什么问题。

标签: python list dataframe


【解决方案1】:

您可以将数据转换为字典并将append() 转换为现有的DataFrame

它需要将列表[1, 2, 3](和类似的)转换为字符串"1,2,3"(等等)

import pandas as pd

df = pd.DataFrame(columns=['Name', 'Date', 'Patcit', 'Npatcit', 'Class'])

# -------------------------------

Name = ['Jon']
Date = [1985]
Patcit = [1, 2, 3]
Npatcit = [4, 5, 6, 7, 8]
Class = [9, 10]

row = {
    'Name': Name[0],
    'Date': Date[0],
    'Patcit':  ','.join(str(x) for x in Patcit),
    'Npatcit': ','.join(str(x) for x in Npatcit),
    'Class':   ','.join(str(x) for x in Class),
}

df = df.append(row, ignore_index=True)

#print(df)

# -------------------------------

Name = ['Nikhil']
Date = [1988]
Patcit = [1, 2, 3]
Npatcit = [4, 5, 6, 7]
Class = [9, 10, 11, 12, 13]

row = {
    'Name': Name[0],
    'Date': Date[0],
    'Patcit':  ','.join(str(x) for x in Patcit),
    'Npatcit': ','.join(str(x) for x in Npatcit),
    'Class':   ','.join(str(x) for x in Class),
}

df = df.append(row, ignore_index=True)

print(df)

结果

     Name  Date Patcit    Npatcit          Class
0     Jon  1985  1,2,3  4,5,6,7,8           9,10
1  Nikhil  1988  1,2,3    4,5,6,7  9,10,11,12,13

稍后您可以使用标准分隔符 - 逗号 - 或其他分隔符写入 csv。

df.to_csv('output.csv', sep=';')

或查看描述如何编写fixed-width-file的其他问题

【讨论】:

    【解决方案2】:

    如果你想从列表中创建一个字符串,你可以试试这个:

    x = ",".join(patcit)
    #the str itself will be the dividor
    #x is now 1,2,3
    #the type of x is str
    

    稍后您可以使用 .split(",") 将其转回字符串列表

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      相关资源
      最近更新 更多