我有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
谢谢你的支持
试试这个:
df2.loc['Percent'] = df1.iloc[4, 1:] / df2.iloc[4, 1:]
您需要通过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.