当前位置: 首页 > 知识库问答 >
问题:

如何从Python中包含字符串和浮点的不同数据帧中分割两行。

莫承运
2023-03-14

我有2个数据帧,我需要从2个数据帧中分割包含字符串和浮点的值,分割应该避免字符串,只在浮点上分割。

DF1

       Col1     Val11   Val12
    0  A        1       9
    1  B        3       1
    2  C        5       4
    3  D        1       3
    4  E        7       6

DF2

       Col2    Val21    Val22
    0  A       20       19
    1  B       35       11
    2  C       46       42
    3  D       31       53
    4  E       28       55

下面这行代码是我写的

df2.iloc['Percent'] = df1.iloc[4]/df2.iloc[4]

但是我得到了下面的错误信息。

TypeError:/:“str”和“str”的操作数类型不受支持

最终DF应该是这样的

       Col2    Val21    Val22
    0  A       20       19
    1  B       35       11
    2  C       46       42
    3  D       31       53
    4  E       28       55
               0.25     0.10

谢谢你的支持

共有2个答案

祁凯泽
2023-03-14

试试这个:

df2.loc['Percent'] = df1.iloc[4, 1:] / df2.iloc[4, 1:]
袁霍英
2023-03-14

您需要通过set\u index获取所有要索引的字符串列,然后除以:

df2 = df2.set_index('Col2')
df2.loc['Percent'] = df1.set_index('Col1').iloc[4].values / df2.iloc[4]
print (df2)

         Val21      Val22
Col2                     
A        20.00  19.000000
B        35.00  11.000000
C        46.00  42.000000
D        31.00  53.000000
E        28.00  55.000000
Percent   0.25   0.109091

如果有多个字符串列,则使用列的子集进行除法,并将子集添加到输出:

df2.loc['Percent'] = df1[['Val11','Val12']].iloc[4].values /  df2[['Val21','Val22']].iloc[4]
print (df2)
        Col2  Val21      Val22
0          A  20.00  19.000000
1          B  35.00  11.000000
2          C  46.00  42.000000
3          D  31.00  53.000000
4          E  28.00  55.000000
Percent  NaN   0.25   0.109091

更通用的解决方案:

str_cols1 = ['Col1']
str_cols2 = ['Col2']
df2.loc['Percent'] = df1.drop(str_cols1, axis=1).iloc[4].values /
                     df2.drop(str_cols2, axis=1).iloc[4]
print (df2)
        Col2  Val21      Val22
0          A  20.00  19.000000
1          B  35.00  11.000000
2          C  46.00  42.000000
3          D  31.00  53.000000
4          E  28.00  55.000000
Percent  NaN   0.25   0.109091

使用选择数据类型提供更好的解决方案:

df2.loc['Percent'] = df1.select_dtypes(['number']).iloc[4].values /
                     df2.select_dtypes(['number']).iloc[4]
print (df2)
        Col2  Val21      Val22
0          A  20.00  19.000000
1          B  35.00  11.000000
2          C  46.00  42.000000
3          D  31.00  53.000000
4          E  28.00  55.000000
Percent  NaN   0.25   0.109091

按注释编辑:

使用to_numeric将非数值替换为NaN

df1_numeric = df1.apply(lambda x: pd.to_numeric(x, errors='coerce'))
df2_numeric = df2.apply(lambda x: pd.to_numeric(x, errors='coerce'))

df2.loc['Percent'] = df1_numeric.iloc[4].values / df2_numeric.iloc[4]
print (df2)
        Col2  Val21     Val22
0          A  20.00        19
1          B  35.00         a
2          C  46.00        42
3          D  31.00        53
4          E  28.00        55
Percent  NaN   0.25  0.109091
 类似资料:
  • 假设Python中有一个如下所示的数据帧: 或者,以表格形式: 如何筛选包含关键字“ball”的行?例如,输出应为:

  • 问题内容: 我有许多类似于的字符串,我只想提取浮点数。我说的是浮动而不是十进制,因为有时它是完整的。RegEx可以这样做还是有更好的方法? 问题答案: 如果你的浮点数始终以十进制表示,则类似于 可能就足够了。 一个更强大的版本是: 如果要验证用户输入,也可以通过直接移至浮动来检查浮动:

  • 我已经使用熊猫导入了一个csv,现在我想删除包含某些通配符的行,可能是dev或test-dashboard-这些是字段中较大字符串的一部分。 我已经尝试了各种方法来这样做我的minus_testing_dashboard变量但没有一个工作

  • 问题内容: 我想用多个定界符分割一个字符串,但将定界符保留在结果列表中。我认为这是解析任何一种公式的初始步骤都是有用的,而且我怀疑有一个不错的Python解决方案。 有人在这里用Java问了类似的问题。 例如,典型的拆分如下所示: 但是我正在寻找一种添加加号(或保留它)的好方法: 最终,我想对每个运算符和括号进行此操作,因此,如果有一种方法 一劳永逸,那就更好了。 问题答案: 您可以使用Pytho

  • 问题内容: 如何在定界符哪里分割此字符串 获得?的输出 问题答案: 你可以使用以下功能:

  • 问题内容: 更新:我应该早点指定它,但是并非所有名称都只是浮点数。例如,其中一些以“ YT”为前缀。因此,例如“ YT1.1。所以,您遇到相同的问题,YT1.9 <YT1.11应该为真。我真的很惊讶字符串比较失败…。 您好,这应该是一个非常简单的问题,但我似乎找不到答案。我想按名称对一堆XL工作表进行排序。每个名称都是数字,但与教科书“节”的编号方式相同,这意味着第4.11节在4.10之后,在4.