python - 将新列添加到可变长度的数据框中

标签 python python-3.x pandas dataframe series

我有一个关于将结果添加到现有数据框的问题。

if relevant_item != 'None' and relevant_item != 'Not in dict':
    items = relevant_item
    len_item = len(items)

    if len_item == 1:
        item_result = items

    if len_item == 2:
        two = items
        item_result = some_method(two)

    if len_item == 3:
        threes = items
        item_result = some_method(three)

hash_in_dict_shopping.append(item_result)#new list of list

shops = pd.Series(hash_in_dict_shopping)
df_final['hash_in_shop'] = shops.values

将新列表附加到现有数据帧时,我收到一条错误消息“ValueError:值的长度与索引的长度不匹配”,所以我想知道如何将新列表添加到新列并填充所有缺少带有“none”的行值,同时保持原始顺序?

过滤前的原始数据(约700行):

'None'
'Not in dict'
['apple','banana', 'grapes']
'None'
'Not in dict'
'Not in dict'
['pasta', 'rice', 'lentils']
'None'
'None'
['milk']

过滤相关项目的数据后(大约 40 行):

 ['apple','banana', 'grapes']
 ['pasta', 'rice', 'lentils']
 ['milk']

应用 some_method 后(从字典返回一个值):

['fruit','green groceries']
['dry food', 'staples', 'legumes']
['dairy']

数据框中的新列包含所有 700 行:

'None'
'None'
['fruit','green groceries']
'None'
'None'
'None'
['dry food', 'staples', 'legumes']
'None'
'None'
['dairy']

最佳答案

有两点需要注意:

  1. 迭代系列时,您不应忽略/跳过“无”/“不在字典中”行。您的新系列必须与原始系列的长度相同。
  2. 您应该使用内置的 Pandas 功能来按行应用函数。由于您无法使用矢量化功能(因为您的数据框包含 list 对象),因此您可以将 pd.Series.apply 与自定义函数一起使用。

这是一个最小的示例:

df = pd.DataFrame({'col': ['None', 'Not in dict', ['apple', 'banana', 'grapes'],
                           'None', ['mile'], 'Not in dict']})

def calculated(x):
    try:
        if x in {'Not in dict', 'None'}:
            return None
    except TypeError:
        if len(x) == 1:
            return 2
        elif len(x) == 2:
            return 4
        else:
            return 6

df['calc'] = df['col'].apply(calculated)

print(df)

                       col  calc
0                     None   NaN
1              Not in dict   NaN
2  [apple, banana, grapes]   6.0
3                     None   NaN
4                   [mile]   2.0
5              Not in dict   NaN

关于python - 将新列添加到可变长度的数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51358500/

相关文章:

python pandas 溢出错误数据帧

python - 如何找到聚类算法的成功率?

python - Python中高效的任意大小的整数打包

python 3 : Can't delete items from list; can't slice elements of a list

python - ord() 预期长度为 1 的字符串,但找到了 int

python-3.x - 如何查找tensorflow.python.data.ops.dataset_ops.MapDataset对象的大小或形状,make_csv_dataset的输出

python - 平日与闰年的比较

python - 如何在 moviepy 中创建包含多个文本的 textClip?

python - 使用时间序列数据在 Python 中将单个 Pandas DataFrame 拆分为 N 个 DataFrame

python - Pandas :在散点图中使用颜色