如何根据位置从数据框列中获取某些值

时间:2020-08-26 20:46:02

标签: python-3.x pandas dataframe

请建议如何处理以下情况。

下面是数据框。

            0    1

AAAXXXX08 / 26/2020
ABC0000000001PPPP测试
ABC0000000002PPPP测试
ABC0000000003PPPP测试
ABC0000000004PPPP测试
ABC0000000005PPPP测试
ABC0000000006PPPP测试

当数据帧中的记录以“ AAA”开头时,如何仅从数据帧中提取值“ 08/26/2020”并分配给变量?

我想根据位置提取日期“ 08/26/2020”(因为我知道日期字段的位置)。不知道是否可能。

目前,我正在采用以下方法。

  • 选择符合条件的记录(以AAA开头)并写入文件。
  • 然后读取相同的文件并利用切片来获取所需的数据。

谢谢

1 个答案:

答案 0 :(得分:0)

这是.extract()方法的一种方式:

from io import StringIO
import pandas as pd

data = '''idx  data
0   AAAXXXX08/26/2020
1  ABC0000000001PPPP TEST
2  ABC0000000002PPPP TEST
3  ABC0000000003PPPP TEST
4  ABC0000000004PPPP TEST
5  ABC0000000005PPPP TEST
6  ABC0000000006PPPP TEST'''

# create data frame
df = pd.read_csv(StringIO(data), sep='\s\s+', engine='python')

# pull out date, if line starts with 'AAA' and ends with date in mm/dd/yyyy format:
df['new_date'] = (df['data'].str.extract(r'AAA.*(\d+/\d+/\d+)')
                            .astype('datetime64[D]'))

# results
print(df)

   idx                    data   new_date
0    0       AAAXXXX08/26/2020 2020-08-26
1    1  ABC0000000001PPPP TEST        NaT
2    2  ABC0000000002PPPP TEST        NaT
3    3  ABC0000000003PPPP TEST        NaT
4    4  ABC0000000004PPPP TEST        NaT
5    5  ABC0000000005PPPP TEST        NaT
6    6  ABC0000000006PPPP TEST        NaT