我在数据框中有一个具有两种数据类型的列,如下所示:
25 3037205
26 2019-09-04 19:54:57
27 2019-09-09 17:55:45
28 2019-09-16 21:40:36
29 3037206
30 2019-09-06 14:49:41
31 2019-09-11 17:17:11
32 3037207
33 2019-09-11 17:19:04
我正在尝试对其进行切片并构建一个新的数据框架,如下所示:
26 3037205 2019-09-04 19:54:57
27 3037205 2019-09-09 17:55:45
28 3037205 2019-09-16 21:40:36
29 3037206 2019-09-06 14:49:41
30 3037206 2019-09-11 17:17:11
31 3037207 2019-09-11 17:19:04
我找不到如何在数字“ no datetype”之间分割。
一些想法?
谢谢!
答案 0 :(得分:4)
另一种方法:
s = pd.to_numeric(df['col1'], errors='coerce')
df.assign(val=s.ffill().astype(int)).loc[s.isnull()]
输出:
col1 val
26 2019-09-04 19:54:57 3037205
27 2019-09-09 17:55:45 3037205
28 2019-09-16 21:40:36 3037205
30 2019-09-06 14:49:41 3037206
31 2019-09-11 17:17:11 3037206
33 2019-09-11 17:19:04 3037207
答案 1 :(得分:2)
我不确定这是否是解决问题的最有效方法,但似乎可以完成工作。我在#:
之后添加了重命名第二列的选项(因为未指定其名称)。import pandas as pd
import numpy as np
data = {'dates':[3037205,'2019-09-04 19:54:57','2019-09-09 17:55:45','2019-09-16 21:40:36',3037206,'2019-09-06 14:49:41','2019-09-11 17:17:11',3037207,'2019-09-11 17:19:04']}
df = pd.DataFrame(data)
df['mask'] = np.where(df['dates'].str.isnumeric(),df['dates'],np.nan)
df['mask_2'] = np.where(df['dates'].str.isnumeric(),np.nan,df['dates'])
df['mask'] = df['mask'].fillna(method='ffill')
df = df.dropna(subset=['mask_2']).drop(columns=['mask_2'])#.rename(columns={'mask':'desired_name'})
print(df)
输出:
dates mask
1 2019-09-04 19:54:57 3037205
2 2019-09-09 17:55:45 3037205
3 2019-09-16 21:40:36 3037205
5 2019-09-06 14:49:41 3037206
6 2019-09-11 17:17:11 3037206
8 2019-09-11 17:19:04 3037207