如何使用Python(pandas)将文本文件格式化/解析为CSV
我想读取一个文本文件,该文件以单列方式包含测试结果(每行有一个测试用例),并将其转换为一个包含多列的CSV文件,其中列是在其列中包含测试结果的人的姓名 CSV文件中的列标题为:“Matt测试、Mark测试、John测试、Mike测试” 在每个人员栏下,他们将从最慢时间到最快时间获得结果。例如,在“马特测试”下,他将有3行trl_马特_测试和6行get_trl_时间,“Mark测试将有2行trl_Mark_测试和3行get_trl_时间等。。。 每次结果都会生成不同数量的结果,因此我无法硬编码行数 testdata.txt(这是我正在读取的文本文件数据): trl_无光测试:15s如何使用Python(pandas)将文本文件格式化/解析为CSV,python,pandas,dataframe,csv,parsing,Python,Pandas,Dataframe,Csv,Parsing,我想读取一个文本文件,该文件以单列方式包含测试结果(每行有一个测试用例),并将其转换为一个包含多列的CSV文件,其中列是在其列中包含测试结果的人的姓名 CSV文件中的列标题为:“Matt测试、Mark测试、John测试、Mike测试” 在每个人员栏下,他们将从最慢时间到最快时间获得结果。例如,在“马特测试”下,他将有3行trl_马特_测试和6行get_trl_时间,“Mark测试将有2行trl_Mark_测试和3行get_trl_时间等。。。 每次结果都会生成不同数量的结果,因此我无法硬编码行数
trl_无光测试:10s
trl_无光测试:12s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
trl_标记试验:13s
trl\U标记测试:20秒
获取时间:1s
获取时间:1s
获取时间:1s
trl_john_测试:20秒
trl_john_测试:25s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
获取时间:1s
trl\u mike\u测试:2s
获取时间:1s
获取时间:1s
现在还不清楚你在找什么,但这可能会让你开始。我用你提供的数据创建了一个txt文件
df = pd.read_csv('testdata.txt', header=0, names=['Results'])
# map the tester to the data
dd = df.Results.str.split('_', 1).str[1].str.split(':').str[0]
cmap = {'matt_test': 'Matt Test', 'mark_test': 'Mark Test', 'john_test': 'John Test', 'mike_test': 'Mike Test'}
df['Tester'] = dd.map(cmap).fillna(method='ffill') # not sure here if you want forward or back fill
# re-orient the data
df_pivot = df.pivot(columns=['Tester'])
Results
Tester John Test Mark Test Matt Test Mike Test
0 NaN NaN trl_matt_test: 10s NaN
1 NaN NaN trl_matt_test: 12s NaN
2 NaN NaN get_trl_time: 1s NaN
3 NaN NaN get_trl_time: 1s NaN
4 NaN NaN get_trl_time: 1s NaN
5 NaN NaN get_trl_time: 1s NaN
6 NaN NaN get_trl_time: 1s NaN
7 NaN NaN get_trl_time: 1s NaN
8 NaN trl_mark_test: 13s NaN NaN
9 NaN trl_mark_test: 20s NaN NaN
10 NaN get_trl_time: 1s NaN NaN
11 NaN get_trl_time: 1s NaN NaN
12 NaN get_trl_time: 1s NaN NaN
13 trl_john_test: 20s NaN NaN NaN
14 trl_john_test:25s NaN NaN NaN
15 get_trl_time: 1s NaN NaN NaN
16 get_trl_time: 1s NaN NaN NaN
17 get_trl_time: 1s NaN NaN NaN
18 get_trl_time: 1s NaN NaN NaN
19 get_trl_time: 1s NaN NaN NaN
20 get_trl_time: 1s NaN NaN NaN
21 get_trl_time: 1s NaN NaN NaN
22 get_trl_time: 1s NaN NaN NaN
23 get_trl_time: 1s NaN NaN NaN
24 get_trl_time: 1s NaN NaN NaN
25 NaN NaN NaN trl_mike_test: 2s
26 NaN NaN NaN get_trl_time: 1s
27 NaN NaN NaN get_trl_time: 1s
# do a count
df_pivot.count()
Tester
Results John Test 12
Mark Test 5
Matt Test 8
Mike Test 3
dtype: int64
这很有帮助,我将更详细地了解这一点,并会回复你。谢谢你的帮助!
df = pd.read_csv('testdata.txt', header=0, names=['Results'])
# map the tester to the data
dd = df.Results.str.split('_', 1).str[1].str.split(':').str[0]
cmap = {'matt_test': 'Matt Test', 'mark_test': 'Mark Test', 'john_test': 'John Test', 'mike_test': 'Mike Test'}
df['Tester'] = dd.map(cmap).fillna(method='ffill') # not sure here if you want forward or back fill
# re-orient the data
df_pivot = df.pivot(columns=['Tester'])
Results
Tester John Test Mark Test Matt Test Mike Test
0 NaN NaN trl_matt_test: 10s NaN
1 NaN NaN trl_matt_test: 12s NaN
2 NaN NaN get_trl_time: 1s NaN
3 NaN NaN get_trl_time: 1s NaN
4 NaN NaN get_trl_time: 1s NaN
5 NaN NaN get_trl_time: 1s NaN
6 NaN NaN get_trl_time: 1s NaN
7 NaN NaN get_trl_time: 1s NaN
8 NaN trl_mark_test: 13s NaN NaN
9 NaN trl_mark_test: 20s NaN NaN
10 NaN get_trl_time: 1s NaN NaN
11 NaN get_trl_time: 1s NaN NaN
12 NaN get_trl_time: 1s NaN NaN
13 trl_john_test: 20s NaN NaN NaN
14 trl_john_test:25s NaN NaN NaN
15 get_trl_time: 1s NaN NaN NaN
16 get_trl_time: 1s NaN NaN NaN
17 get_trl_time: 1s NaN NaN NaN
18 get_trl_time: 1s NaN NaN NaN
19 get_trl_time: 1s NaN NaN NaN
20 get_trl_time: 1s NaN NaN NaN
21 get_trl_time: 1s NaN NaN NaN
22 get_trl_time: 1s NaN NaN NaN
23 get_trl_time: 1s NaN NaN NaN
24 get_trl_time: 1s NaN NaN NaN
25 NaN NaN NaN trl_mike_test: 2s
26 NaN NaN NaN get_trl_time: 1s
27 NaN NaN NaN get_trl_time: 1s
# do a count
df_pivot.count()
Tester
Results John Test 12
Mark Test 5
Matt Test 8
Mike Test 3
dtype: int64