gpt4 book ai didi

python - 将混合类型的 DataFrame 拆分为两列?

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:29 25 4
gpt4 key购买 nike

我正在修改加载到 DataFrame 中的报告。报告的 SKU 列具有混合数据类型。我想根据单元格数据类型(str、int)将该列拆分为两个新列(SUBTOTAL 和 SKU)。

遵循 similar question 中的示例我得到一个 bool 列。好的

df['SUBTOTAL'] = df['SKU'].apply(lambda x: isinstance(x, str))

SKU AMOUNT SUBTOTAL
7 4410 1 False
8 4200 5 False
9 total 6 True
11 4250 0 False
12 4255 0 False

我在 Jupyter Notebook 中执行此操作。这就是让我发疯的事情。如果我首先调用上面的行,然后用df[]包装代码,然后重新运行那个单元格,我得到了我想要的。

df['SUBTOTAL'] = df[df['SKU'].apply(lambda x: isinstance(x, str))]

SKU AMOUNT SUBTOTAL
7 4410 1 NaN
8 4200 5 NaN
9 total 6 total
11 4250 0 NaN
12 4255 0 NaN

但是当我重新启动并运行所有时,我得到一个键错误

我几乎必须在同一行上运行两次,

df['SUBTOTAL'] = df['SKU'].apply(lambda x: isinstance(x, str))
df['SUBTOTAL'] = df[df['SKU'].apply(lambda x: isinstance(x, str))]

如何将混合类型的 DataFrame 拆分为两列?

最终结果应该是,

    SKU                     AMOUNT       SUBTOTAL 
7 4410 1 NaN
8 4200 5 NaN
9 NaN 6 total
11 4250 0 NaN
12 4255 0 NaN

或者我可以添加一个新的 SKUb 列并删除、重命名等等。

最佳答案

与检查字符串相比,检查数字数据可能是一个更好的主意。您可以使用优化的 pd.to_numeric + pd.Series.isnull 而不是 apply + lambda:

s = df['SKU'].copy()  # make copy for later
df['SKU'] = pd.to_numeric(df['SKU'], errors='coerce') # gives nan for non-numeric data
df['SUBTOTAL'] = np.where(df['SKU'].isnull(), s, np.nan)

目前,您的代码还不清楚。您正在尝试将数据帧分配给一个系列,因为 df['SUBTOTAL'] 是一个系列,但是 df[df['SKU'].apply(lambda x: isinstance(x , str))] 是一个数据框。不建议这样做。

关于python - 将混合类型的 DataFrame 拆分为两列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51585244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com