使用给定长度的列表使数据框具有不同的列长度

时间:2019-09-22 10:31:50

标签: python pandas dataframe

我有两个长度不同的列表,我想形成一个具有这些列表作为DataFrame列的DataFrame。 可以说我的清单是     L1 =["a","b"]     L2 = ["g","h","o","y"]     L3 = ["k","u","e"]

我想要一个看起来像

的数据框
 L1 L2 L3
 a  g  k
 b  h  u
    o  e
    y   

这个问题不仅限于三列,它在数百个范围内

2 个答案:

答案 0 :(得分:1)

以下结果可能正在寻找,其想法是将列表转换为数据框,您还可以创建一个将列表参数作为输入的函数,而不是手动将每个列表都键入数据框。

示例1:

import pandas as pd 
import numpy as np

## your list
L1 =["a","b"] 
L2 = ["g","h","o","y"] 
L3 = ["k","u","e"]

## Convert List into DataFrame 
L1 = pd.DataFrame(L1)
L2 = pd.DataFrame(L2)
L3 = pd.DataFrame(L3)

## Concanate the created DataFrames and Fill 'NaN' with or empty spaces 
db =pd.concat([L1,L2,L3], ignore_index=True, axis=1).replace(np.nan, '')

## Results
print(db)

示例2(函数传递列表参数):

import pandas as pd 
import numpy as np

## your list
L1 =["a","b"] 
L2 = ["g","h","o","y"] 
L3 = ["k","u","e"]

## function passing arguments
def wrapper(*args):
    return pd.concat([pd.DataFrame(i) for i in args], ignore_index=True, axis=1).replace(np.nan, '')


## Results
print(wrapper(L1,L2,L3))

答案 1 :(得分:1)

您可以使用itertools中的zip_longest迭代器。它将用fillvalue填充较短的序列,默认情况下为None。您可以在下面的示例中指定其他内容,例如空字符串。

from itertools import zip_longest
df = pd.DataFrame(zip_longest(L1,L2,L3, fillvalue=''), 
                  columns=['L1','L2','L3'])