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