我正在处理一些组织不良的数据,这些数据记录了第1行(Y、M、D)中的日期,而下一个N行是按值(ID、value1、value2)组织的。
例如:
column1 column2 column3
2018 10 2
ID01 a 1
ID02 b 4
ID03 c 2
2018 10 3
ID01 d 7
ID02 e 6
ID03 f 1我希望将日期行中的日期解析为日期时间格式(2018-10-2),然后将它们移到新的列中。
我想让它看起来像:
column1 column2 column3 date
ID01 a 1 2018-10-2
ID02 b 4 2018-10-2
ID03 c 2 2018-10-2
ID01 d 7 2018-10-3
ID02 e 6 2018-10-3
ID03 f 1 2018-10-3我尝试的方法之一是从文件末尾向后工作,检测日期行(检查第1列是否包含一年),并将该行中的数据分割为以解析的日期时间格式命名的新文件。然后,在这个文件中,我可以读取文件名(已经被解析了),并使用这些数据创建一个新列。之后,我会将所有文件合并到一个内聚的数据集中。
我遇到的问题是,我无法弄清楚如何告诉熊猫,让它们倒行逆施,只在某一排分道扬镳。我的一个想法是将最后一次约会的index#写入一个变量,并将该行号上的数据分割为一个新文件,但我不知道如何从底部迭代它。此外,我知道这种方法非常混乱,我相信有一种更有效的方法来实现这一点。
关于识别日期列和解析日期的内容:
years = [2015,2016,2017,2018]
df['year?'] = df['column1'].isin(years).astype(int) # Detect date row
if df['year?'] == 1: # I receive errors here
# Parse dates here
datedf = (df['column1'].astype(str))+(df['column2'].astype(str))+(df['column3'].astype(str))
df['date'] = pd.to_datetime(datedf, format='%Y%m%d') # Write date to 'date' column发布于 2019-05-22 16:32:23
我们可以通过几个步骤解决这个问题:
forwardfill连接起来。df2 = df[df['column1'].str.match('(\d{4})')]
df2['date'] = pd.to_datetime(df2['column1'].astype(str) + df2['column2'].astype(str) + df2['column3'].astype(str), format='%Y%m%d')
df_final = pd.concat([df[~df['column1'].str.match('(\d{4})')], df2]).sort_index().ffill()
df_final = df_final[~df_final['column1'].str.match('(\d{4})')] column1 column2 column3 date
1 ID01 a 1 2018-10-02
2 ID02 b 4 2018-10-02
3 ID03 c 2 2018-10-02
5 ID01 d 7 2018-10-03
6 ID02 e 6 2018-10-03
7 ID03 f 1 2018-10-03Note
我使用column1、column2和column3作为列名。
发布于 2019-05-22 16:31:04
试试这个:
df = pd.DataFrame([[2018,10,2],['ID01','a',1],['ID02','b',4],['ID03','c',2],[2018,10,3],['ID01','d',7],['ID02','e',6],['ID03','f',1]])
data = []
for index, row in df.iterrows():
if isinstance(row[0], int):
dt = pd.to_datetime('{}-{}-{}'.format(row[0],row[1],row[2]))
else:
data.append([row[0],row[1],row[2],dt])
df = pd.DataFrame(data)输出
0 1 2 3
0 ID01 a 1 2018-10-02
1 ID02 b 4 2018-10-02
2 ID03 c 2 2018-10-02
3 ID01 d 7 2018-10-03
4 ID02 e 6 2018-10-03
5 ID03 f 1 2018-10-03https://stackoverflow.com/questions/56261116
复制相似问题