当某些列为字符串,而某些列为整数时,如何按条件子集化数据框?

时间:2019-11-20 01:57:31

标签: python pandas dataframe

我有一个名为dc的数据框,其“ SEX”列为92201行。

当我尝试对所有1进行子集化时,key新数据帧会产生name行。

当我尝试对所有0的子集:key="layer.name"进行子集化时,新的数据帧会产生dc1num=dc[dc['SEX']==1]行。

当我尝试将所有1子集作为一个字符串子集时,新数据框len(dc1num)= 47614会产生dc0num=dc[dc['SEX']==0]行。

当我尝试将所有0子集作为字符串的子集时,len(dc0num)= 40492新数据帧会产生dc1str=dc[dc['SEX']=='1'],行。

它们全部精确地相加多达len(dc1str)= 2130行,与原始数据集中的行数相同。因此,显然其中一些编码为1,一些编码为“ 1”;一些零被编码为0,一些被编码为'0'。

我从此信息中收集到,此dataframe列中的某些行编码为整数,而另一些编码为字符串。

我想对所有1和0进行子集化,这样

dc0str=dc[dc['SEX']=='0'],

len(dc0str)= 1965

我尝试用47614+40492+2130+1965 = 92201将它们全部变成字符串,然后尝试len(dc1)= 49,744 len(dc0)= 47,614 ,但这产生了与以前相同的结果。什么也没做我应该如何解决这个问题?

5 个答案:

答案 0 :(得分:2)

使用:

dc['SEX']=dc['SEX'].astype(int)
# or dc['SEX']=dc['SEX'].astype(float)

然后:

dc1num=dc[dc['SEX']==1]
dc0num=dc[dc['SEX']==0]

您也可以这样做:

for i,group in df.groupby('SEX'):
    print(group)

答案 1 :(得分:0)

通常我们可以进行一次转换

df.SEX=pd.to_numeric(df.SEX)

然后我们可以分割df

df1=df.query('SEX==1')
df2=df.query('SEX==0')

答案 2 :(得分:0)

要将数据强制转换为字符串格式,请尝试使用下面的函数;您拨打电话的方式不适用。

df['A'] = df['A'].astype(str)

答案 3 :(得分:0)

一种适用于非整数数字的方法:

df['SEX'] = pd.to_numeric(df['SEX'], errors='coerce')

答案 4 :(得分:0)

解决方案1:将列中的所有值转换为整数

df ['col1'] = df ['col1']。astype(int)

        (OR)

将熊猫作为pd导入 df ['col1'] = pd.to_numeric(df ['co11'])

解决方案2:将列中的所有值转换为字符串 示例:df ['col1'] = df.col1.apply(str)

以上解决方案之一应该有效