首页 > 解决方案 > 在 pandas 中创建一系列参差不齐的列表时避免 VisibleDeprecationWarning

问题描述

我有一种方法应用于熊猫系列以生成两列,如下所示。返回的列之一包含不同大小的列表。这产生VisibleDeprecationWarning. 我怎样才能避免这种情况?

我尝试了这个答案中显示的内容。但不能真正采用它来适应我这里的情况。

import pandas as pd
import numpy as np

def some_method(i):
    return i, np.random.randint(10, size=i)

df = pd.DataFrame(np.random.randint(10, size=100), columns=["a"])
df["c"], df["d"] = zip(*df.a.apply(some_method))

标签: pythonpandasdataframenumpy

解决方案


您可以生成Series并分配给列列表:

def some_method(i):
    return pd.Series([i, np.random.randint(10, size=i)])

df = pd.DataFrame(np.random.randint(10, size=100), columns=["a"])
df[["c", "d"]] = df.a.apply(some_method)
print (df)
    a  c                            d
0   2  2                       [2, 5]
1   1  1                          [2]
2   8  8     [2, 8, 2, 9, 1, 0, 9, 4]
3   9  9  [9, 0, 5, 6, 5, 0, 4, 9, 5]
4   8  8     [8, 7, 4, 6, 1, 7, 0, 0]
.. .. ..                          ...
95  7  7        [6, 4, 1, 5, 1, 5, 5]
96  0  0                           []
97  9  9  [7, 1, 0, 6, 0, 8, 0, 6, 4]
98  8  8     [2, 0, 4, 2, 8, 9, 5, 7]
99  1  1                          [6]

[100 rows x 3 columns]

或者DataFrame如果性能很重要,则从函数生成的元组创建:

def some_method(i):
    return i, np.random.randint(10, size=i)

df = pd.DataFrame(np.random.randint(10, size=100), columns=["a"])
df[["c", "d"]] = pd.DataFrame(df.a.apply(some_method).tolist())

推荐阅读