熊猫根据元素类别拆分列

时间:2020-05-12 14:29:10

标签: python pandas encoding

我有一个pandas.DataFrame,我有一列。列包含整数,字符串,时间...

我想创建一种列(包含[0,1]),以有效地告诉该列中的值是否为字符串,时间是否为时间。

          A
0  Hello 
1  Name
2  123
3  456
4  22/03/2019

输出应该是

          A    A_string A_number A_date
0  Hello       1        0        0
1  Name        1        0        0 
2  123         0        1        0
3  456         0        1        0
4  22/03/2019  0        0        1 

2 个答案:

答案 0 :(得分:3)

使用pandas str方法检查字符串类型可能会有所帮助:

df = pd.read_clipboard()

df['A_string'] = df.A.str.isalpha().astype(int)

df['A_number'] = df.A.str.isdigit().astype(int)

#naive assumption
df['A_Date'] = (~df.A.str.isalnum()).astype(int)

df.filter(['A','A_string','A_number','A_Date'])

    A       A_string    A_number    A_Date
0   Hello       1          0           0
1   Name        1          0           0
2   123         0          1           0
3   456         0          1           0
4   22/03/2019  0          0           1

答案 1 :(得分:1)

我们可以使用本地大熊猫.to_numericto_datetime来测试日期和数字。然后,我们可以使用.loc进行分配,并使用fillna来匹配目标df。

df.loc[~pd.to_datetime(df['A'],errors='coerce').isna(),'A_Date'] = 1

df.loc[~pd.to_numeric(df['A'],errors='coerce').isna(),'A_Number'] = 1

df.loc[(pd.to_numeric(df['A'],errors='coerce').isna()) 
       & pd.to_datetime(df['A'],errors='coerce').isna()
       ,'A_String'] = 1

df = df.fillna(0)


print(df)

            A  A_Date  A_Number  A_String
0       Hello     0.0       0.0       1.0
1        Name     0.0       0.0       1.0
2         123     0.0       1.0       0.0
3         456     0.0       1.0       0.0
4  22/03/2019     1.0       0.0       0.0