Разделение столбца данных на структуре символов и цифр - PullRequest
0 голосов
/ 17 января 2020

У меня есть фрейм данных:

    A
1   king, crab, 2008
2   green, 2010
3   blue
4   green no. 4
5   green, house

Я хочу разбить даты на:

    A                  B
1   king, crab         2008
2   green              2010
3   blue
4   green no. 4
5   green, house

Я не могу разделить первый экземпляр ",", потому что это будет make:

    A                  B
1   king               crab, 2008
2   green              2010
3   blue
4   green no. 4
5   green              house

Я не могу разделить после последнего экземпляра ",", потому что это сделает:

    A                  B
1   king crab          2008
2   green              2010
3   blue
4   green no. 4
5   green              house

Я также не могу разделить его по номерам, потому что это будет:

    A                  B
1   king, crab         2008
2   green              2010
3   blue
4   green no.          4
5   green, house

Есть ли какой-нибудь способ деления на ",", а затем число 4 di git, которое находится между двумя значениями? Условие двух значений будет дополнительной безопасностью для фильтрации случайных чисел 4 di git, которые явно не являются годами. Например.

Разделить на: ", " + (four digit number between 1000 - 2021)

Также приветствуются ответы, которые разделены на: ", " + four digit number

Еще лучше будет ответ, в котором учтено, что число ВСЕГДА в конце строки.

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Или вы можете просто использовать series.str.extract и replace:

df = pd.DataFrame({"A":["king, crab, 2008","green, 2010","blue","green no. 4","green, house"]})

df["year"] = df["A"].str.extract("(\d{4})")
df["A"] = df["A"].str.replace(",\s\d{4}","")

print (df)

              A  year
0    king, crab  2008
1         green  2010
2          blue   NaN
3   green no. 4   NaN
4  green, house   NaN
2 голосов
/ 17 января 2020
import pandas as pd

list_dict_Input = [{'A': 'king, crab, 2008'}, 
                   {'A':  'green, 2010'}, 
                   {'A':  'green no. 4'}, 
                   {'A':   'green no. 4'},]

df = pd.DataFrame(list_dict_Input)

for row_Index in range(len(df)):
    text = (df.iloc[row_Index]['A']).strip()
    last_4_Char = (text[-4:])

    if last_4_Char.isdigit() and int(last_4_Char) >= 1000 and  int(last_4_Char) <= 2021:
            df.at[row_Index, 'B'] = last_4_Char


print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...