我想比较3个不同的一对数据帧。在我的数据框列中,某些值不是浮点类型,即","介于这些值之间,所以我想删除","从那些值,然后我想将这些列转换为浮点类型。最后一步是比较三对不同的数据框架列。
数据帧:
aaa float_type1 float_type2 float_type3 float_type4 float_type5 float_type6
0 abc 1.12 1.120 1.20 1.2 1,67 167
1 xyz 1,2.5 2.35 1.25 125 12,5 12.5
2 pqr 3.56 3.58 35.6 3.78 3.90 5.56
3 pqr 5.5 5.8 5.05 5.005 5.500 5,5.78
4 pqr 6.6 6.9 6.06 6.06 6.60 6.600
计划:
def float_type_format(arg):
arg = arg.replace(',', '')
return arg
data = {'aaa' :{0:'abc',1:'xyz',2:'pqr',3:'pqr',4:'pqr'},
'float_type1' :{0:'1.12',1:'1,2.5',2:'3.56',3:'5.5',4:'6.6'},
'float_type2' :{0:'1.120',1:'2.35',2:'3.58',3:'5.8',4:'6.9'},
'float_type3' :{0:'1.20',1:'1.25',2:'35.6',3:'5.05',4:'6.06'},
'float_type4' :{0:'1.2',1:'125',2:'3.78',3:'5.005',4:'6.06'},
'float_type5' :{0:'1,67',1:'12,5',2:'3.90',3:'5.500',4:'6.60'},
'float_type6' :{0:'167',1:'12.5',2:'5.56',3:'5,5.78',4:'6.600'}}
df1 = pd.DataFrame(data)
#removing "," from float values
df1['float_type1'] = df1['float_type1'].apply(float_type_format)
df1['float_type2'] = df1['float_type2'].apply(float_type_format)
df1['float_type3'] = df1['float_type3'].apply(float_type_format)
df1['float_type4'] = df1['float_type4'].apply(float_type_format)
df1['float_type5'] = df1['float_type5'].apply(float_type_format)
df1['float_type6'] = df1['float_type6'].apply(float_type_format)
#converting dtype into float
df1.float_type1 = df1.float_type1.astype('float')
df1.float_type2 = df1.float_type2.astype('float')
df1.float_type3 = df1.float_type3.astype('float')
df1.float_type4 = df1.float_type4.astype('float')
df1.float_type5 = df1.float_type5.astype('float')
df1.float_type6 = df1.float_type6.astype('float')
删除","从列值I' m跟随上面的逻辑。
问题1:
他们是否有任何快速的表现和良好的方式来消除","来自专栏。
现在我想将float_type1与float_type2进行比较,将float_type3与float_type4进行比较,将float_type5与float_type6进行比较,如果所有3对都相等,则只有结果列包含true,预期输出如下:
aaa float_type1 float_type2 float_type3 float_type4 float_type5 \
0 abc 1.12 1.12 1.2 1.2 167.0
float_type6 result
0 167.0 True
问题2:
我想要一种强有力的方法来执行此比较。
答案 0 :(得分:2)
您可以replace
使用regex=True
来大大简化您的代码。然后,您可以使用pd.to_numeric
转换为数字,然后您可以使用一些布尔逻辑获取结果列。
df2 = df1.replace(',','',regex=True)
df2 = df2.apply(pd.to_numeric, errors='ignore')
df2['result'] = ((df2['float_type1'] == df2['float_type2']) &
(df2['float_type3'] == df2['float_type4']) &
(df2['float_type5'] == df2['float_type6']))
aaa float_type1 float_type2 float_type3 float_type4 float_type5 \
0 abc 1.12 1.12 1.20 1.200 167.0
1 xyz 12.50 2.35 1.25 125.000 125.0
2 pqr 3.56 3.58 35.60 3.780 3.9
3 pqr 5.50 5.80 5.05 5.005 5.5
4 pqr 6.60 6.90 6.06 6.060 6.6
float_type6 result
0 167.00 True
1 12.50 False
2 5.56 False
3 55.78 False
4 6.60 False
答案 1 :(得分:0)
import numpy as np
import pandas as pd
def float_type_format(arg):
arg = arg.replace(',', '')
return arg
data = {'aaa' :{0:'abc',1:'xyz',2:'pqr',3:'pqr',4:'pqr'},
'float_type1' :{0:'1.12',1:'1,2.5',2:'3.56',3:'5.5',4:'6.6'},
'float_type2' :{0:'1.120',1:'2.35',2:'3.58',3:'5.8',4:'6.9'},
'float_type3' :{0:'1.20',1:'1.25',2:'35.6',3:'5.05',4:'6.06'},
'float_type4' :{0:'1.2',1:'125',2:'3.78',3:'5.005',4:'6.06'},
'float_type5' :{0:'1,67',1:'12,5',2:'3.90',3:'5.500',4:'6.60'},
'float_type6' :{0:'167',1:'12.5',2:'5.56',3:'5,5.78',4:'6.600'}}
df1 = pd.DataFrame(data)
print(df1.head(6))
#removing "," from float values
df1['float_type1'] = df1['float_type1'].apply(float_type_format)
df1['float_type2'] = df1['float_type2'].apply(float_type_format)
df1['float_type3'] = df1['float_type3'].apply(float_type_format)
df1['float_type4'] = df1['float_type4'].apply(float_type_format)
df1['float_type5'] = df1['float_type5'].apply(float_type_format)
df1['float_type6'] = df1['float_type6'].apply(float_type_format)
#converting dtype into float
df1.float_type1 = df1.float_type1.astype('float')
df1.float_type2 = df1.float_type2.astype('float')
df1.float_type3 = df1.float_type3.astype('float')
df1.float_type4 = df1.float_type4.astype('float')
df1.float_type5 = df1.float_type5.astype('float')
df1.float_type6 = df1.float_type6.astype('float')
df1['test'] = (df1['float_type1']==df1['float_type2']) & (df1['float_type3']==df1['float_type4']) & (df1['float_type5']==df1['float_type6'])
print(df1.head(6))
我花了一段时间才意识到你拥有所有的df1 [' float_type1'] 在替换部分中,从而使整个数据帧相同。洛尔
这是我提出的方式,可能不是最好的方法。
aaa float_type1 float_type2 float_type3 float_type4 float_type5 \
0 abc 1.12 1.12 1.20 1.200 167.0
1 xyz 12.50 2.35 1.25 125.000 125.0
2 pqr 3.56 3.58 35.60 3.780 3.9
3 pqr 5.50 5.80 5.05 5.005 5.5
4 pqr 6.60 6.90 6.06 6.060 6.6
float_type6 test
0 167.00 True
1 12.50 False
2 5.56 False
3 55.78 False
4 6.60 False