创建一个与数据中最长列长度相同的列

jxp*_*hon -1 python dataframe python-3.x pandas

我有以下数据:

data = [[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6,7]]
dataFrame = pandas.DataFrame(data).transpose()
Run Code Online (Sandbox Code Playgroud)

输出:

     0    1    2
0  1.0  1.0  1.0
1  2.0  2.0  2.0
2  3.0  3.0  3.0
3  NaN  4.0  4.0
4  NaN  5.0  5.0
5  NaN  NaN  6.0
6  NaN  NaN  7.0
Run Code Online (Sandbox Code Playgroud)

是否可以在同一时间创建第4列,其他列是在数据中创建的,其长度与此数据帧的最长列(第3列)相同?

本专栏的数据无关紧要.假设它是8.所以这是所需的输出可以是:

     0    1    2    3
0  1.0  1.0  1.0  8.0
1  2.0  2.0  2.0  8.0
2  3.0  3.0  3.0  8.0
3  NaN  4.0  4.0  8.0
4  NaN  5.0  5.0  8.0
5  NaN  NaN  6.0  8.0
6  NaN  NaN  7.0  8.0
Run Code Online (Sandbox Code Playgroud)

在我的脚本中,数据帧每次都在不断变化.这意味着最长的列随之不断变化.

谢谢阅读

Joh*_*hnE 6

这非常类似于@jpp,@ Cleb的答案,也许还有其他一些答案,只是稍微简单一些:

data = [[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6,7]] + [[]]
Run Code Online (Sandbox Code Playgroud)

这将自动为您提供一列NaN,其长度与最长的列相同,因此您不需要额外的工作来计算最长列的长度.结果数据帧:

     0    1    2   3
0  1.0  1.0  1.0 NaN
1  2.0  2.0  2.0 NaN
2  3.0  3.0  3.0 NaN
3  NaN  4.0  4.0 NaN
4  NaN  5.0  5.0 NaN
5  NaN  NaN  6.0 NaN
6  NaN  NaN  7.0 NaN
Run Code Online (Sandbox Code Playgroud)

请注意,这个答案不像其他人那样(例如@jpp和@Cleb),因为它只会填充NaN.如果您想要除NaN之外的某些默认填充值,则应使用其中一个答案.


jpp*_*jpp 5

您可以附加到列表,然后立即提供pd.DataFrame构造函数:

import pandas as pd

data = [[1,2,3], [1,2,3,4,5], [1,2,3,4,5,6,7]]

df = pd.DataFrame(data + [[8]*max(map(len, data))]).transpose()

print(df)

     0    1    2    3
0  1.0  1.0  1.0  8.0
1  2.0  2.0  2.0  8.0
2  3.0  3.0  3.0  8.0
3  NaN  4.0  4.0  8.0
4  NaN  5.0  5.0  8.0
5  NaN  NaN  6.0  8.0
6  NaN  NaN  7.0  8.0
Run Code Online (Sandbox Code Playgroud)

但这效率低下.Pandas使用NumPy来保存底层系列,并将一系列设置为常数值是微不足道和高效的; 你可以简单地使用:

df[3] = 8
Run Code Online (Sandbox Code Playgroud)