Python 将非结构化数据帧修改为新的结构化数据帧
我有一个类似下面的df,我想在一个新的数据帧中转换它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
# 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