![](/img/trans.png)
[英]Keeping only one column value of a 2 level Multi-index Pandas dataframe while ignoring NaN's
[英]Change a column format while ignoring (or keeping) NaN
我想将包含此格式hh:mm:ss
值的列从 DataFrame 更改为包含分钟数的列(同时保留 NaN 值)
我不能直接从 excel 文件更改它,所以我尝试使用 pandas 来更改它(我正在使用带有健康数据库的 ML model):
38 00:35:00
39 00:50:00
40 00:45:00
41 01:32:00
42 00:29:00
43 NaN
44 00:45:00
45 00:13:00
46 00:20:00
47 00:31:00
48 00:54:00
49 00:43:00
50 02:33:00
我尝试使用掩码将值与 NaN 值分开,然后使用str.split()
转换为分钟
df1 = df['delay'][df['delay'].notnull()].astype(str).str.split(':').apply(lambda x: int(x[0]) * 60 + int(x[1]))```
df2 = df['delai_ponc_recal_calc'][df['delai_ponc_recal_calc'].isnull()]
但是后来我不能在不丢失顺序的情况下合并到两个系列(我在合并系列的末尾得到具有正确索引的 NaN 值)
39 50
40 45
41 92
42 29
44 45
45 13
46 20
47 31
48 54
49 43
50 153
43 NaN
我还尝试使用循环(不使用掩码)将 go 从hh:mm:ss
到timedelta
datatime.time
分钟,但我仍然无法在分钟内拥有包含所有值的列(系列或 DF)保留 NaN ...
您可以使用pd.to_timedelta
将delay
列转换为 Pandas timedelta 系列,然后将其Timedelta
1 min
的Timedelta
以获得总分钟数:
pd.to_timedelta(df['delay'], errors='coerce') / pd.Timedelta(1, 'min')
39 50.0
40 45.0
41 92.0
42 29.0
43 NaN
44 45.0
45 13.0
46 20.0
47 31.0
48 54.0
49 43.0
50 153.0
Name: delay, dtype: float64
以下是一些可能的解决方案:
输入:
delay
38 00:35:00
39 00:50:00
40 00:45:00
41 01:32:00
42 00:29:00
43 NaN
44 00:45:00
45 00:13:00
46 00:20:00
47 00:31:00
48 00:54:00
49 00:43:00
50 02:33:00
方法一: pd.to_datetime
+ map
df['delay'] = pd.to_datetime(df['delay'])
#using lambda function
df['delay2'] = df['delay'].map(lambda x : x.hour*60 + x.minute)
print(df['delay2'])
#df.drop(['delay'],axis=1,inplace=True)
方法二: pd.to_datetime
+ dt
#converts time columns to pandas datetime64ns format
df['delay'] = pd.to_datetime(df['delay'])
#using dt to extract hour and minute data
df['delay2'] = df['delay'].dt.hour*60 + df['delay'].dt.minute
print(df['delay2'])
输出:
39 50.0
40 45.0
41 92.0
42 29.0
43 NaN
44 45.0
45 13.0
46 20.0
47 31.0
48 54.0
49 43.0
50 153.0
Name: Time, dtype: float64
对于一般情况,您可以使用errors='ignore'
,如下所示:
df['column_name'].astype(int, errors='ignore')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.