Python 将非结构化数据帧修改为新的结构化数据帧

Python 将非结构化数据帧修改为新的结构化数据帧,python,pandas,Python,Pandas,我有一个类似下面的df,我想在一个新的数据帧中转换它 # column_1 column_2 column_3 column_4 # ticket 12345 # Date 2020-02-01 # UPC Code Description Qty Unit Price # 987654 product 1 1 10 # 879756 product 2 1 7 # 987895 prod

我有一个类似下面的df,我想在一个新的数据帧中转换它

# column_1  column_2    column_3  column_4
# ticket    12345     
# Date      2020-02-01
# UPC Code  Description Qty       Unit Price
# 987654    product 1   1         10
# 879756    product 2   1         7
# 987895    product 3   2         5
# ticket    12346
# Date      2020-02-03
# UPC Code  Description Qty       Unit Price
# 987654    product 1   1         10
# 997651    product 4   1         3 
# ticket    12347
这是新数据帧的一个示例:

# ticket  date        upc_code  description qty unit_price
# 12345   2020-02-01  987654    product 1   1   10
# 12345   2020-02-01  879756    product 2   1   7
# 12345   2020-02-01  987895    product 3   2   5
# 12346   2020-02-03  987654    product 1   1   10
# 12346   2020-02-03  997651    product 4   1   3
# 12347
谁能帮帮我吗?我在想怎么做。 每个票据值都是一个采购订单,票据和日期值应根据每个订单上的产品重复。 Upc代码下面的行会随着购买的物品数量的变化而变化


提前谢谢你

IIUC,您需要过滤空行和字符串,然后在一些旋转后重新合并

如果空白不是真空值,可以使用以下代码行转换它们

import numpy as np
df = df.replace('',np.nan,regex=True)



print(df)

    column_1     column_2 column_3    column_4
0     ticket        12345      NaN         NaN
1       Date   2020-02-01      NaN         NaN
2   UPC Code  Description      Qty  Unit Price
3     987654    product 1        1          10
4     879756    product 2        1           7
5     987895    product 3        2           5
6     ticket        12346      NaN         NaN
7       Date   2020-02-03      NaN         NaN
8   UPC Code  Description      Qty  Unit Price
9     987654    product 1        1          10
10    997651    product 4        1           3
11    ticket        12347      NaN         NaN



IIUC,您需要过滤空白行和字符串,然后在一些旋转后重新合并

如果空格不是真的空值,可以使用以下代码行转换它们

import numpy as np
df = df.replace('',np.nan,regex=True)



print(df)

    column_1     column_2 column_3    column_4
0     ticket        12345      NaN         NaN
1       Date   2020-02-01      NaN         NaN
2   UPC Code  Description      Qty  Unit Price
3     987654    product 1        1          10
4     879756    product 2        1           7
5     987895    product 3        2           5
6     ticket        12346      NaN         NaN
7       Date   2020-02-03      NaN         NaN
8   UPC Code  Description      Qty  Unit Price
9     987654    product 1        1          10
10    997651    product 4        1           3
11    ticket        12347      NaN         NaN



您是否考虑过使用csv包手动解析它?我还没有使用csv包。我先尝试了pandas函数,因为我认为这更简单。您是否考虑过使用csv包手动解析它?我还没有使用csv包。我想先试试熊猫功能,因为我觉得我更容易。嗨,谢谢!它几乎做得很完美,但在我的数据集中,我注意到在df2中,票证值每3行改变一次,即:票证12345出现3次,然后12346出现3次,依此类推。这种情况不应该发生,因为每张票据的产品列表更改为2种或4种或更多。你知道如何修复它吗?我重新检查了代码,但是现在票证每2次出现一次..我没有提到,但由于票证是这样运行的..在数据帧结束时,票证和日期变为NaN和NaT@henriqm很抱歉耽搁了,我想您需要检查
s1和s2
以查看哪些过滤不正确,然后修改str.contains函数以匹配。明白!检查并发现列_1中的某些日期行在列_4中有不同的编号。我正试图将这些数字转换成NaN。我尝试了.loc来定位这些行(列_1中的日期和列_4中的值!=NaN),将数字更改为NaN,然后检查s&s1代码,但这是我的新问题..尝试找出如何操作。嗨,谢谢!它几乎做得很完美,但在我的数据集中,我注意到在df2中,票证值每3行改变一次,即:票证12345出现3次,然后12346出现3次,依此类推。这种情况不应该发生,因为每张票据的产品列表更改为2种或4种或更多。你知道如何修复它吗?我重新检查了代码,但是现在票证每2次出现一次..我没有提到,但由于票证是这样运行的..在数据帧结束时,票证和日期变为NaN和NaT@henriqm很抱歉耽搁了,我想您需要检查
s1和s2
以查看哪些过滤不正确,然后修改str.contains函数以匹配。明白!检查并发现列_1中的某些日期行在列_4中有不同的编号。我正试图将这些数字转换成NaN。我尝试了.loc来定位这些行(列_1中的日期和列_4中的值!=NaN),将数字更改为NaN,然后检查s&s1代码,但这是我的新问题..尝试找出如何做。
print(df2)

         Date ticket column_1   column_2 column_3 column_4
0  2020-02-01  12345   987654  product 1        1       10
1  2020-02-01  12345   879756  product 2        1        7
2  2020-02-01  12346   987895  product 3        2        5
3  2020-02-03  12346   987654  product 1        1       10
4  2020-02-03  12347   997651  product 4        1        3