【问题标题】:Changing Dataframe type with an exception更改数据框类型并出现异常
【发布时间】:2021-04-27 21:45:27
【问题描述】:

我有一些由 1 列和 5 行组成的熊猫数据框,每个数据框包含 3 个值,“1”、“0”和“P”。这些数据框属于“对象”类型。

当我将数据框添加在一起时遇到了问题。我给你举个例子:

df1 = [ 1, P, 0, 1, 1]
df2 = [1, P, 1, 1,1]
df1 + df2 = [11, PP, 01, 11,11]

注意:“P”在所有数据帧中始终位于同一位置。因此,当将数据帧加在一起时,例如我可以得到“PPPPP”。

在上面的示例中,我试图让输出为:

df1 + df2 =  [2, P, 1, 2, 2]

我在想的是使用 pandas 使每个数据框列数字化,然后我应该能够将它们加在一起。

pd.to_numeric(df1["my df title"], errors='coerce')

这样做的问题是“P”值无法转换为数字。如何使除 p 值之外的所有内容都变成数字?

当我添加 df1 + df2 + df3 + df4 时,我的真实数据框是什么样子的:

0     1111
1     PPPP
2     1111
3     1111
4     PPPP

【问题讨论】:

  • 您能添加一个合适的数据框示例吗?我只看到三个列表,如果数据不敏感,您可以print(df.head(5).to_dict()) 并将输出粘贴到此处。
  • 我已经添加了添加的样子。
  • df1 = [ 1, P, 0, 1, 1] 不是 DataFrame,它是由整数和变量 P 组成的列表。请使用您的 DataFrames 发布完全可重现的代码

标签: python pandas


【解决方案1】:

只需使用if-else 将每个值转换为预期输出即可。

import pandas as pd

df1 = pd.DataFrame({'col': [ '1', 'P', '0', '1', '1']})
df2 = pd.DataFrame({'col': [ '1', 'P', '1', '1', '1']})

s = df1['col'] + df2['col']

s = s.map(lambda x: 'P' if 'P' in x else sum(map(int, list(x))))
print(s)

0    2
1    P
2    1
3    2
4    2
Name: col, dtype: object

【讨论】:

  • 谢谢,正是我要找的东西
猜你喜欢
  • 2021-11-18
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 2021-06-17
  • 2014-10-07
相关资源
最近更新 更多