首页 > 解决方案 > 向下迭代熊猫系列,如果字符串的第一个位置不是“1”,则在第一次出现空间时拆分到新列

问题描述

我想要一些帮助,在只有一列的很长的字符串中清除一些数据。在这些长字符串中是由空格分隔的数据位。但是,在所需信息之间会发现一些额外字符(在某些行/索引上)。我已经整理了一个数据框示例来显示正在发生的事情。

发生了什么:代码中的最后一行将循环遍历系列并将字符串开头与第一个空格之间的第一个值分开。然后将该值移动到 new_col。它在每一行中循环,在某些行中捕获“1”,在其他行中捕获随机字符。

我希望发生的事情:以“1”开头的行不理会。以非“1”开头的行移至新列。这将允许我重新对齐我的数据并纠正空格,直到下一次打嗝。希望我能带走我在这里学到的东西并继续前进。

我试图做的事情:我试图用一个 for 循环来解决问题,该循环将识别第一个位置不是“1”转到 else 语句并调用该行以在第一个空格处拆分数据。我收到一个 ValueError: Columns must be the same length as key error at the line after the else 语句。我假设我正在尝试调用数据框列,但 for 循环正在从变量“line”工作。只是不确定。

import pandas as pd
from pandas import DataFrame, Series

file = {'Test': ['1 RTWXA LC WTHML',
                 '2TE7 1 RHRRA LY HGHRL',
                 '1 WJKFD LF LPKRF',
                 'ATEGR/5 1 WJFTA LC TRGEH',
                 '1 POKJD LD PLERT',
                 '4ARF/3 1 EDFRT TG IUYHT' ] }

df = pd.DataFrame(file)

# ----Questionable Code Starts-----
df[['new-col','Test']] = (df["Test"].str.extract("([^\s]*)\s?(1.*)"))
# ----Questionable Code Ends-------

# below line will split (using spaces) at one occurrence only.
# creates new column (misc_col) and places data within keeping row/index 
# integrity.
# df[['new_col','Test']] = df.Test.str.split(" ", 1, expand=True)

print(df)

What's Happening:                       What I would like:
           Test      new_col                           Test      new_col
0    RTWXA LC WTHML        1            0   1 RTWXA LC WTHML      
1  1 RHRRA LY HGHRL     2TE7            1   1 RHRRA LY HGHRL     2TE7 
2    WJKFD LF LPKRF        1            2   1 WJKFD LF LPKRF   
3  1 WJFTA LC TRGEH  ATEGR/5            3   1 WJFTA LC TRGEH     ATEGR/5
4    POKJD LD PLERT        1            4   1 POKJD LD PLERT      
5  1 EDFRT TG IUYHT   4ARF/3            5   1 EDFRT TG IUYHT     4ARF/3

与往常一样,我很感激你能提供的任何帮助,让我度过这个难关。

谢谢

标签: pythonpandassplit

解决方案


您可以使用pd.Series.str.extract

print (df["Test"].str.extract("([^\s]*)\s?(1.*)"))

         0                 1
0           1 RTWXA LC WTHML
1     2TE7  1 RHRRA LY HGHRL
2           1 WJKFD LF LPKRF
3  ATEGR/5  1 WJFTA LC TRGEH
4           1 POKJD LD PLERT
5   4ARF/3  1 EDFRT TG IUYHT

推荐阅读