Я пытаюсь разделить столбец pandas на два отдельных, где первый должен содержать только дату и вторую строку. Но я не хочу разбивать его после определенного символа, например, подсчитывая, где последнее целое число, вместо этого я хочу сделать код, который применим в целом.
Мой кол выглядит так:
И я хочу, чтобы это выглядело так:
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)
Я так и сделал, но мне нужен общий способ, как указано выше.
Вы можете использовать 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)
Объяснение:
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)
Конечно, это возможно. Но по какой причине? есть ли у вас столбцы, начинающиеся с цифр, которые не являются датами? Или у вас есть 2 разных формата даты, например. гггг-мм-дд и дд.мм.гггг?
Ничего, решил проблему другим способом!
Вы можете просто использовать индексацию:
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
Я не хочу делать это с индексацией, потому что в некоторых строках есть просто строки, и тогда индексация нарезает мою строку
как я могу изменить этот код, чтобы вместо поиска столбца начинаться с «1» или «2», я хочу посмотреть значения столбца для 1 и 2 с?