Pandas 我该如何处理这件乱七八糟的事?

Pandas 我该如何处理这件乱七八糟的事?,pandas,dataframe,data-wrangling,Pandas,Dataframe,Data Wrangling,如何将这些凌乱的数据帧从字符串转换为底部的建议数据帧 模块 import pandas as pad import io 字符串数据 test = '\tStart\t \t \tStop\n\t12/12/20 1400\t\t\nrugby \n\t12/16/20 1359\n\t12/12/20 1300\t\t\nsoccer \n\t12/19/20 0859\n\t12/12/20 1300\t\t\nbasketball \n\t12/19/20 0659\n\n\n\n'

如何将这些凌乱的数据帧从字符串转换为底部的建议数据帧

模块

import pandas as pad
import io
字符串数据

test = '\tStart\t \t \tStop\n\t12/12/20 1400\t\t\nrugby  \n\t12/16/20 1359\n\t12/12/20 1300\t\t\nsoccer \n\t12/19/20 0859\n\t12/12/20 1300\t\t\nbasketball \n\t12/19/20 0659\n\n\n\n'
变为数据帧

test_raw = io.StringIO(test)
test_df = pad.read_csv(test, sep='\t')

test_df

    Unnamed: 0          Start       .1  Stop
0          NaN  12/12/20 1400 NaN  NaN   NaN
1      rugby              NaN NaN  NaN   NaN
2          NaN  12/16/20 1359 NaN  NaN   NaN
3          NaN  12/12/20 1300 NaN  NaN   NaN
4      soccer             NaN NaN  NaN   NaN
5          NaN  12/19/20 0859 NaN  NaN   NaN
6          NaN  12/12/20 1300 NaN  NaN   NaN
7  basketball             NaN NaN  NaN   NaN
8          NaN  12/19/20 0659 NaN  NaN   NaN

如何将其转换为:

           Start       Sport           Stop
0  12/12/20 1400       rugby  12/16/20 1359
1  12/12/20 1300      soccer  12/19/20 0859
2  12/12/20 1300  basketball  12/19/20 0659
提前感谢@

导入re
作为pd进口熊猫
将numpy作为np导入
test='\tStart\t\t\tStop\n\t12/12/20 1400\t\t\nrugby\n\t12/16/20 1359\n\t12/12/20 1300\t\t\t\nsoccer\n\t12/19/20 0859\n\t12/12/20 1300\t\n篮球\t12/19/20 0659\n\n\n\n\n\n\n
#步骤1拆分测试由\n
alist=test.split('\n')
#['\tStart\t\t\tStop',
#“\t12/12/20 1400\t\t”,
#“橄榄球”,
#“\t12/16/20 1359”,
#“\t12/12/20 1300\t\t”,
#“足球”,
#“\t12/19/20 0859”,
#“\t12/12/20 1300\t\t”,
#“篮球”,
#“\t12/19/20 0659”,
#  '',
#  '',
#  '',
#  '']
#步骤2我们可以看到每一行都有一个位置索引规则
# 1. 从索引1,4,…,1+3n开始
# 2. 指数为2,5,…,2+3n的运动
# 3. 索引为3,6,…,3+3n时停止
Start_col1=alist[1::3]#->['\t12/12/20 1400\t\t'、'\t12/12/20 1300\t\t'、'\t12/12/20 1300\t\t'、'''.']
Sport_col2=alist[2::3]#->[橄榄球、足球、篮球、足球]
Stop_col3=alist[3::3]#->['\t12/16/20 1359','\t12/19/20 0859','\t12/19/20 0659',']
#步骤3使用zip将相同的位置索引组合在一个元组中
blist=list(zip(开始、运动、停止)
#[(“\t12/12/20 1400\t\t”、“橄榄球”和“\t12/16/20 1359”),
#(“\t12/12/20 1300\t\t”,“soccer”和“\t12/19/20 0859”),
#(“\t12/12/20 1300\t\t”、“basketball”和“\t12/19/20 0659”),
#  ('', '', '')]
#步骤4转换为数据帧
dfn=局部数据帧(blist)
打印(dfn)
#                     0            1                2
#0\t12/12/20 1400\t\t橄榄球\t12/16/20 1359
#1\t12/12/20 1300\t\t足球\t12/19/20 0859
#2\t12/12/20 1300\t\t篮球\t12/19/20 0659
# 3                                                   
#step5条带空间
dfn=dfn.applymap(str.strip)
打印(dfn)
#                0           1              2
#0 12/12/20 1400橄榄球12/16/20 1359
#1 120/12/20 1300足球12/19/20 0859
#1920年12月12日1300篮球120659年12月19日
# 3                                          
#步骤6删除空行
cond=dfn[1]=''
dfn=dfn[~cond]
打印(dfn)
#                0           1              2
#0 12/12/20 1400橄榄球12/16/20 1359
#1 120/12/20 1300足球12/19/20 0859
#1920年12月12日1300篮球120659年12月19日
#步骤7设置数据帧的列
dfn.columns=[“开始”、“运动”、“停止”]

我认为您应该在\n上进行拆分。虽然此代码可能会解决问题,但它如何以及为什么会真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。