pandas 如何使用循环将多个列表写入 Dataframe

rjjhvcjd  于 2022-11-20  发布在  其他
关注(0)|答案(3)|浏览(360)

我有几个从get_topic()函数生成的列表,

list1 = get_topic(1)
list2 = get_topic(2)
and another dozens of lists.

# The list contains something like

[('A', 0.1),('B', 0.2),('C',0.3)]

我正在尝试写一个循环,这样所有不同的列表都可以保存到 Dataframe 的不同列中。我尝试的代码是:

for i in range(1,number) # number is the total number of lists + 1
    df_02 = pd.DataFrame(get_topic(i)

这只返回list 1,而不返回其他列表。我希望得到的结果如下:
| 清单1|第一名|清单2|二号|
| - -|- -|- -|- -|
| A级|0.1分|D级|0.03分|
| B| 0.2分|E级|0.04分|
| C语言|0.3分|F级|0.05分|
有谁能帮我纠正一下这个循环吗?谢谢。

u59ebvdq

u59ebvdq1#

df = pd.DataFrame()
for i in range(1, number):
    df[f'List {i}'], df[f'Number {i}'] = zip(*get_topic(i))
gudnpqoy

gudnpqoy2#

我重新构造了一个假设的get_topic()函数,该函数只是从一个列表列表中获取一个列表。
其思想是使用pd.concat()以便在每次迭代时连接 Dataframe 。

import pandas as pd

topics = [
    [('A', 0.1), ('B', 0.2), ('C', 0.3)],
    [('D', 0.3), ('E', 0.4), ('F', 0.5)]
]
number = len(topics)

def get_topic(index) -> []:
    return topics[index]

if __name__ == '__main__':
    df = pd.DataFrame()
    for i in range(0, number):  # number is the total number of lists
        curr_topic = get_topic(i)
        curr_columns = ['List ' + str(i+1), 'Number ' + str(i+1)]
        df = pd.concat([df, pd.DataFrame(data=curr_topic, columns=curr_columns)], axis=1)

print(df)

输出将为:

List 1  Number 1 List 2  Number 2
0      A       0.1      D       0.3
1      B       0.2      E       0.4
2      C       0.3      F       0.5
rbpvctlc

rbpvctlc3#

您将在每次迭代时创建一个新的DataFrame。
这将创建一个类似于您所需的结构:

df = pd.DataFrame([get_topic(i) for i in range(1, number)])
df = df.apply(pd.Series.explode).reset_index(drop=True)
df = df.transpose()

结果:

0    1  2    3  4    5
0  A  0.1  D  0.1  G  0.1
1  B  0.2  E  0.2  H  0.2
2  C  0.3  F  0.3  I  0.3

单行版本:

df = pd.DataFrame([get_topic(i) for i in range(1, number)]).apply(pd.Series.explode).reset_index(drop=True).transpose()

相关问题