python - Python Pandas 拆分字符串并将余数存储在新行中
问题描述
我有一个 pandas 数据框,其中每两天进行一次观察。“日期”列中的每个值都描述了两天的范围(例如 2020-02-22 到 2020-02-23)。
我想将这些 Date 值分成单独的日子,每一天都有一行。我得到的最接近的是做newdf = df_day.set_index(df_day.columns.drop('Date',1).tolist()).Date.str.split(' to ', expand=True).stack().reset_index().loc[:, df_day.columns]
这里的问题是新的日期值以 NaN 形式返回。有没有办法实现按天分解的数据?
解决方案
我可能不明白,但根据图像,它是每行一个日期,只是标签很差——我会操纵索引字符串,如果我不能这样做,我会创建一个新的日期列,或者新的df w/ clean date 并合并它。
您应该能够使用 lambda 删除前 14 个字符——在 index.html 中留下第二个列出的日期。
我无法重现这个,所以请耐心等待。
df.rename(index=lambda s: s[14:])
#should remove first 14 characters from each row label.
#leaving just '2020-02-23' in row 2.
#If you must skip row 1, idx = df.index[1:]
#or df.iloc[1:].rename(index=lambda s: s[1:])
否则,我会用新的日期时间索引替换它。
didx = pd.DatetimeIndex(start ='2000-01-10', freq ='D',end='2020-02-26')
#Make sure same length as df
df.set_index(didx)
#Or
#df['new_date'] = didx.values
#df.set_index('new_date').drop(columns=['Date'])
#Or
#df.append(didx,axis=1) #might need ignore_index=True
推荐阅读
- angular - 如何让 PM2 启动 Angular Universal?
- android - 为什么 EditText.getText 在 Android 中显示为 null?
- sql - SQL order by DECODE 和 CASE 返回相同条件的不同数据
- c# - 实体类型需要定义主键 - 主键是唯一定义的东西
- android - 如何在 android studio 上的 kotlin 中获取用户的输入
- jmeter - Jmeter - 改变每个环境的值
- windows - (已解决)禁用 Windows 10 系统弹出窗口(重启、更新、低电量)
- flutter - 使用抽屉后 WillPopScope 不工作
- mysql - 有没有办法在 SQL 中乘以结果?
- angular - 我的角材料文本很大,我无法控制它