Python 数据帧-更改数据结构(重新组织)
我读取了一个包含这些数据的csv文件:Python 数据帧-更改数据结构(重新组织),python,pandas,dataframe,data-structures,Python,Pandas,Dataframe,Data Structures,我读取了一个包含这些数据的csv文件: CatPart 1 CodeItem 1 12 15 5.5 3 CodeItem 2 7 6 2 7 CatPart 5 CodeItem 0 1 25 1.5 7 CodeItem 8 25 1 22 1 我希望在数据帧中使用这
CatPart 1
CodeItem 1
12 15
5.5 3
CodeItem 2
7 6
2 7
CatPart 5
CodeItem 0
1 25
1.5 7
CodeItem 8
25 1
22 1
我希望在数据帧中使用这种格式
CatPart CodeItem Weight Nb
1 1 12 15
1 1 5.5 3
1 2 7 6
1 2 2 7
5 0 1 25
5 0 1.5 7
5 8 25 1
5 8 22 1
所以首先我用柱的名称创建标题
df.columns=[“重量”、“Nb”、“CatPart”、“代码项”]
我删除了空行。我的策略是将CatPart行中的值复制到Cartpart列,该部分没有问题(见下文),复制值后替换nan直到下一个值(执行相同的CodeItem),然后删除CatPart行和CodeItem行,但我没有找到复制值的方法
Weight Nb CatPart CodeItem
CatPart 1 1 nan
CodeItem 1 nan 1
12 15 nan nan
5.5 3 nan nan
CodeItem 2 2 nan
7 6 nan nan
2 7 nan nan
CatPart 5 5 nan
CodeItem 0 nan 0
1 25 nan nan
1.5 7 nan nan
CodeItem 8 8 nan
25 1 nan nan
22 1 nan nan
或者他们的方法更简单,但我看不出来
谢谢你的帮助!
F.这不是csv文件
- 当
或CatPart
更改时,它们将在行首用字段标记,后跟可变数量的空格,然后是值CodeItem
&weight
始终显示在同一行上,以空格分隔nb
- 当以下信息存在时,可以认为记录已填写。
,CatPart
,codeem
,weight
nb
import io
import re
import pandas as pd
text = """CatPart 1
CodeItem 1
12 15
5.5 3
CodeItem 2
7 6
2 7
CatPart 5
CodeItem 0
1 25
1.5 7
CodeItem 8
25 1
22 1"""
records = []
part, item, weight, nb = '', '', '', ''
for line in io.StringIO(text):
if line.startswith('CatPart'):
_, part = re.split('\s+', line.strip())
if line.startswith('CodeItem'):
_, item = re.split('\s+', line.strip())
if re.match('^\d+', line):
weight, nb = re.split('\s+', line.strip())
records.append([part, item, weight, nb])
注意,我使用了io.StringIO
在内存中为这个示例创建了一个文件。将其替换为以下内容:
with open('/path/to/my/file.txt') as in_file:
for line in in_file:
...
然后将记录传递到pandas.DataFrame构造函数中
df = pd.DataFrame(records, columns=['CatPart', 'CatItem', 'weight', 'nb'])
生成以下输出:
CatPart CatItem weight nb
0 1 1 12 15
1 1 1 5.5 3
2 1 2 7 6
3 1 2 2 7
4 5 0 1 25
5 5 0 1.5 7
6 5 8 25 1
7 5 8 22 1
然而,直到现在,我还没有从字符串转换任何数据。您可以在读取数据时进行转换,也可以在表中结构化数据后使用以下方法进行转换:
df = df.astype(float)