pandas 如果行不是NaN,则该列的前两行应与none NaN值合并

vi4fp9gy  于 2023-04-04  发布在  其他
关注(0)|答案(1)|浏览(131)

我有一个数据集,它有几个NaN值,但是当它被清理时,前两行应该来自列2,应该在同一行上,价格。我在第一行中删除了NaN值,因为我注意到了一个模式,下面是一个代码片段

import pandas as pd
four = pd.read_excel('4.-Badly-Structured-Sales-Data-4.xlsx', header = None)
four.iloc[0] = four.iloc[0].fillna(method='ffill')
four

\n脏数据如下所示
| 0|1|第二章|三|四|五|六|七|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 南|运输模式|头等舱|头等舱|当天|当天|二等舱|二等舱|
| 南|分段|消费者|公司|消费者|公司|消费者|公司|
| 订单ID|订单日期|NaN|NaN|NaN|NaN|NaN|NaN|
| CA-2011-100293|2013-03-14 00:00:00|NaN|NaN|NaN|NaN|NaN|三十五点五十六分|
| CA-2011-111293|2013-07-14 00:00:00|NaN|NaN|23.679|NaN|NaN|NaN|
| CA-2011-130294|2013-03-12 00:00:00|NaN|NaN|NaN|六十五点三三分|NaN|NaN|
| CA-2011-167293|2013-05-22 00:00:00|NaN|NaN|NaN|NaN|NaN|四十五点五六|
| CA-2011-100253|2013-03-23 00:00:00|一百二十七点四四|NaN|NaN|NaN|NaN|NaN|
| CA-2011-100231|2013-02-14 00:00:00|NaN|NaN|NaN|568.333|NaN|NaN|
| CA-2011-156223|2013-08-14 00:00:00|NaN|五九三点一一|NaN|NaN|NaN|NaN|
| CA-2011-100719|2013-03-28 00:00:00|NaN|NaN|NaN|NaN|三十七点三|NaN|
我尝试使用一个IF语句

for i,j in four.iterrows():
    if i != 'NaN':
        print(four.iloc[0] + str(i))

但是它没有给出我想要的。清理后的数据应该看起来像这样,并且不需要真正担心日期列x1c 0d1x
请帮帮忙

qij5mzcb

qij5mzcb1#

第一个想法是在列和索引中创建MultiIndex,它如何依赖于Excel中的数据。这是第一个想法:

df = pd.read_excel('4.-Badly-Structured-Sales-Data-4.xlsx', header = [0,1], index_col=[0,1])

上次整形:

df = (df.stack([0,1])
        .rename_axis(['Order ID','Order Date','Ship Mode','Segment'])
        .reset_index(name='Sales'))

相关问题