Можно ли разделить столбец pandas после последнего целого числа?

Я пытаюсь разделить столбец pandas на два отдельных, где первый должен содержать только дату и вторую строку. Но я не хочу разбивать его после определенного символа, например, подсчитывая, где последнее целое число, вместо этого я хочу сделать код, который применим в целом.

Мой кол выглядит так:

Колонка А 01.01.2000Джон Доу 01.01.2002Джейн Доу

И я хочу, чтобы это выглядело так:

Колонка А Колонка Б 01.01.2000 Джон Доу 01.01.2001 Джейн Доу
df_t['date'] = df_t['date_time'].str[0:19]
df_t["name"] = df_t["date_time"].str[19: ]
    
    
tid = df_t.drop(["date_time"], axis = 1)

Я так и сделал, но мне нужен общий способ, как указано выше.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать str.extract вместе с регулярными выражениями:

import pandas as pd

# Sample data
data = {'Column A': ['01.01.2000John Doe', '01.01.2002Jane Doe']}
df = pd.DataFrame(data)

# Regular expression pattern
pattern = r'(?P<Date>\d{2}\.\d{2}\.\d{4})(?P<Name>.*)'

# Extracting the date and name into separate columns
df[['Column A', 'Column B']] = df['Column A'].str.extract(pattern)

print(df)

Объяснение:

  • Переменная шаблона содержит шаблон регулярного выражения. Выражение (?P\d{2}.\d{2}.\d{4}) фиксирует дату, а (?P.*) фиксирует имя.
  • Синтаксис ?P<> используется для именования захваченных групп, что упрощает создание новых столбцов в DataFrame.

РЕДАКТИРОВАТЬ

import pandas as pd

# Sample data
data = {
    '1Column A': ['2000-01-01 00:00:00John Doe', '2002-01-01 00:00:00Jane Doe'],
    '2Column B': ['2000-01-01 00:00:00Alice', '2002-01-01 00:00:00Bob'],
    '3Column C': ['Some other data', 'Not a date and name'],
}

df = pd.DataFrame(data)

# Regular expression pattern
pattern = r'(?P<Date>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})(?P<Name>.*)'

# Iterate through columns and apply the pattern conditionally
for col in df.columns:
    if col.startswith("1") or col.startswith("2"):
        # Extract date and name into separate columns with suffixes
        df[[f"{col}_date", f"{col}_name"]] = df[col].str.extract(pattern)
        # Drop the original column
        df.drop(col, axis=1, inplace=True)

print(df)

как я могу изменить этот код, чтобы вместо поиска столбца начинаться с «1» или «2», я хочу посмотреть значения столбца для 1 и 2 с?

otto334 18.04.2023 09:33

Конечно, это возможно. Но по какой причине? есть ли у вас столбцы, начинающиеся с цифр, которые не являются датами? Или у вас есть 2 разных формата даты, например. гггг-мм-дд и дд.мм.гггг?

DataJanitor 18.04.2023 10:09

Ничего, решил проблему другим способом!

otto334 18.04.2023 14:40

Вы можете просто использовать индексацию:

df['Column A'], df['Column B'] = df['Column A'].str[:10], df['Column A'].str[10:]
print(df)

# Output
     Column A  Column B
0  01.01.2000  John Doe
1  01.01.2002  Jane Doe

Если вы хотите конвертировать как datetime64:

df['Column A'], df['Column B'] = \
    pd.to_datetime(df['Column A'].str[:10], dayfirst=True), df['Column A'].str[10:]
print(df)

# Output
    Column A  Column B
0 2000-01-01  John Doe
1 2002-01-01  Jane Doe

Я не хочу делать это с индексацией, потому что в некоторых строках есть просто строки, и тогда индексация нарезает мою строку

otto334 17.04.2023 11:30

Другие вопросы по теме