gpt4 book ai didi

python - 从 pandas 数据框中提取 4 位数字列名

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:31 24 4
gpt4 key购买 nike

我有一个包含以下列名称的数据框:

array([u'country_name', u'country_code', u'functional_crop_code',
u'functional_crop_type', 1961, 1962, 1963, 1964, 1965, 1966, 1967,
1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978,
1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989,
1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
2012, 2013], dtype=object)

我只想提取 4 位数字的列名称,即 1961、1962...我尝试过此操作,但它不起作用:

df.filter(regex=r'\d{4}$').columns.values

我收到错误:*** TypeError:预期的字符串或缓冲区

最佳答案

问题是您有一些列是 int ,因此当尝试对这些 int 值应用正则表达式时,它会失败并出现错误 -

TypeError: expected string or buffer

您可以将列转换为 str,然后应用 DataFrame.filter -

df.columns = df.columns.astype(str)
df.filter(regex=r'\d{4}$').columns.values

演示 -

In [8]: df.columns = df.columns.astype(str)

In [11]: df.filter(regex=r'\d{4}$').columns.values
Out[11]:
array(['1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968',
'1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976',
'1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984',
'1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992',
'1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000',
'2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008',
'2009', '2010', '2011', '2012', '2013'], dtype=object)
<小时/>

您需要先转换为 str,然后才能在列名称上应用正则表达式,这是一种不转换列名称的方法(不确定是否最有效)永久地转换为 str 并仍然获得所需的数据是 -

df.columns[df.columns.astype(str).str.contains(r'\d{4}$')]

演示 -

In [19]: df.columns[df.columns.astype(str).str.contains(r'\d{4}$')]
Out[19]:
Index([1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972,
1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984,
1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2009, 2010, 2011, 2012, 2013],
dtype='object')

关于python - 从 pandas 数据框中提取 4 位数字列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com