将文本拆分为 pandas 数据框:处理不同维度
Spliting text into pandas dataframe : dealing with different dimension
我正在尝试将 series
拆分为 pandas 列,但我正在处理以下问题:
df.head()
Opportunity Name Amount Currency Amount
XXXX - XX - 2019 - 01 - 20 ARS 300
YYY - YY - Y -2019 - 01 -21 CHL 350
ZZZZ - ZZ - 2019 - 03 - 25 ARS 500
TT - TT - T - TT - 2019 - 04 - 26 ARS 1000
每当我尝试获取一个新的数据框时,我可以在其中将日期放在单独的列中。
我将 str.split()
函数与 expands=True
和拆分分隔符 -
一起使用
df['Opportunity Name'].str.split('-' , expand=True)
但我的结果很乱,很难选择带有日期的列,因为它是这样拆分的:
0 1 2 3 4 5 6
XXXX XX 2019 01 20 None None
YYY YY Y 2019 01 21 None
ZZZZ ZZ 2019 03 25 None None
TT TT T TT 2019 04 26
这使得很难分割该数据框,我只想从该字符串 datafrane 列中获取日期
- 提供真实数据与示例数据一致,日期字符始终在末尾。
- 使用内置函数
isnumeric
和列表推导来获取列表中的数字
''.join([...][-8:])
仅组合最后 8 个字符
.to_datetime
转换为数据时间格式
df['Date'] = df['Opportunity Name'].apply(lambda x: ''.join([y for y in x if y.isnumeric()][-8:]))
df['Date'] = pd.to_datetime(df['Date'])
print(df)
Opportunity Name Amount Currency Amount Date
0 XXXX - XX - 32019 - 01 - 20 ARS 300 2019-01-20
1 YYY - YY - Y -2019 - 01 -21 CHL 350 2019-01-21
2 ZZZZ - ZZ - 2019 - 03 - 25 ARS 500 2019-03-25
3 TT - TT - T - TT - 2019 - 04 - 26 ARS 1000 2019-04-26
获取第一个值
df['first_value'] = df['Opportunity Name'].apply(lambda x: x.split('-')[0].strip())
print(df)
Opportunity Name Amount Currency Amount Date first_value
0 XXXX - XX - 32019 - 01 - 20 ARS 300 2019-01-20 XXXX
1 YYY - YY - Y -2019 - 01 -21 CHL 350 2019-01-21 YYY
2 ZZZZ - ZZ - 2019 - 03 - 25 ARS 500 2019-03-25 ZZZZ
3 TT - TT - T - TT - 2019 - 04 - 26 ARS 1000 2019-04-26 TT
我正在尝试将 series
拆分为 pandas 列,但我正在处理以下问题:
df.head()
Opportunity Name Amount Currency Amount
XXXX - XX - 2019 - 01 - 20 ARS 300
YYY - YY - Y -2019 - 01 -21 CHL 350
ZZZZ - ZZ - 2019 - 03 - 25 ARS 500
TT - TT - T - TT - 2019 - 04 - 26 ARS 1000
每当我尝试获取一个新的数据框时,我可以在其中将日期放在单独的列中。
我将 str.split()
函数与 expands=True
和拆分分隔符 -
df['Opportunity Name'].str.split('-' , expand=True)
但我的结果很乱,很难选择带有日期的列,因为它是这样拆分的:
0 1 2 3 4 5 6
XXXX XX 2019 01 20 None None
YYY YY Y 2019 01 21 None
ZZZZ ZZ 2019 03 25 None None
TT TT T TT 2019 04 26
这使得很难分割该数据框,我只想从该字符串 datafrane 列中获取日期
- 提供真实数据与示例数据一致,日期字符始终在末尾。
- 使用内置函数
isnumeric
和列表推导来获取列表中的数字 ''.join([...][-8:])
仅组合最后 8 个字符.to_datetime
转换为数据时间格式
df['Date'] = df['Opportunity Name'].apply(lambda x: ''.join([y for y in x if y.isnumeric()][-8:]))
df['Date'] = pd.to_datetime(df['Date'])
print(df)
Opportunity Name Amount Currency Amount Date
0 XXXX - XX - 32019 - 01 - 20 ARS 300 2019-01-20
1 YYY - YY - Y -2019 - 01 -21 CHL 350 2019-01-21
2 ZZZZ - ZZ - 2019 - 03 - 25 ARS 500 2019-03-25
3 TT - TT - T - TT - 2019 - 04 - 26 ARS 1000 2019-04-26
获取第一个值
df['first_value'] = df['Opportunity Name'].apply(lambda x: x.split('-')[0].strip())
print(df)
Opportunity Name Amount Currency Amount Date first_value
0 XXXX - XX - 32019 - 01 - 20 ARS 300 2019-01-20 XXXX
1 YYY - YY - Y -2019 - 01 -21 CHL 350 2019-01-21 YYY
2 ZZZZ - ZZ - 2019 - 03 - 25 ARS 500 2019-03-25 ZZZZ
3 TT - TT - T - TT - 2019 - 04 - 26 ARS 1000 2019-04-26 TT