我有一个具有列日期的数据框,我正尝试用基于索引的另一个列表替换,例如: rong_dates_indexes具有原始数据帧df中日期格式错误的索引列表:
dirty_dates_indexes=[4,33,48,54,59,91,95,132,160,175,180,197,203,206,229,237,266,271,278,294,298,333,348,373,380,420,442]
formated_dates=['2019-04-25','2019-12-01','2019-06-16','2019-10-07','2019-08-06','2019-02-17','2019-11-20','2019-03-10','2019-10-11','2019-03-04','2019-07-31','2019-10-12','2019-09-13','2019-08-26','2019-12-29','2019-10-11','2019-11-20','2019-06-16','2019-12-12','2019-03-22','2019-01-21','2019-03-21','2019-10-15','2019-12-01','2019-03-20','2019-09-08','2019-08-19']
我正在尝试将df中的所有值替换为索引中的 错误格式的索引,其值的格式为格式日期。
我尝试了以下代码,但是收到错误消息:
for index in dirty_dates_indexes:
df.loc[index].date.replace(df.loc[index].date,formated_dates(f for f in range(0,len(range(formated_dates)))))
错误:
TypeError: 'list' object cannot be interpreted as an integer
如何解决?还是有更好的方法?
答案 0 :(得分:0)
您正在尝试从dirty_dates_indexes
获取值,并使用该值在formatted_dates
中查找位置。可能会惹您生气。
您使用loc而不是iloc来到达特定行。
这就是我所做的。
dirty_dates_indexes=[4,33,48,54,
59,91,95,132,
160,175,180,197,
203,206,229,237,
266,271,278,294,
298,333,348,373,
380,420,442]
formated_dates=['2019-04-25','2019-12-01','2019-06-16','2019-10-07',
'2019-08-06','2019-02-17','2019-11-20','2019-03-10',
'2019-10-11','2019-03-04','2019-07-31','2019-10-12',
'2019-09-13','2019-08-26','2019-12-29','2019-10-11',
'2019-11-20','2019-06-16','2019-12-12','2019-03-22',
'2019-01-21','2019-03-21','2019-10-15','2019-12-01',
'2019-03-20','2019-09-08','2019-08-19']
import pandas as pd
df = pd.DataFrame()
df['dirty_dates'] = pd.date_range('2019-01-01', periods=500,freq='D')
for i,row_id in enumerate(dirty_dates_indexes):
df.dirty_dates.iloc[row_id] = pd.to_datetime(formated_dates[i])
print (df.head(20))
结果如下:
dirty_dates
0 2019-01-01
1 2019-01-02
2 2019-01-03
3 2019-01-04
4 2019-04-25 # <-- this row changed
5 2019-01-06
6 2019-01-07
7 2019-01-08
8 2019-01-09
9 2019-01-10
10 2019-01-11
11 2019-01-12
12 2019-01-13
13 2019-01-14
14 2019-01-15
15 2019-01-16
16 2019-01-17
17 2019-01-18
18 2019-01-19
19 2019-01-20