我有一个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
答案 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_numeric
,to_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