【问题标题】:Find the row of an index value in a Pandas dataframe在 Pandas 数据框中查找索引值的行
【发布时间】:2015-09-23 21:51:47
【问题描述】:

我导入数据并用年份索引它(第一列)
rawData = pandas.read_csv(inFile)
rawData.set_index('Year', inplace=True)

我的数据现在有两列,一列是年份,另一列是价格,


年价格
1925 100
1926 105
1927 125


2014 1000

我现在想删除某一年之前的所有数据,所以我写
startYr = 1946
rawData1 = rawData[startYr:]

但这没有任何作用,因为 1946 大于最大索引(即 80)。找到对应于 1946 的行 startIdx 的正确方法是什么,这样我就可以写
startIdx = some_function(startYr)
rawData1 = rawData[startIdx:]

提前感谢您的帮助

托马斯·飞利浦

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用loc 进行基于标签的索引:

    In [3]:
    df = pd.DataFrame(index = np.arange(1925,2015))
    df
    
    Out[3]:
    Empty DataFrame
    Columns: []
    Index: [1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 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, 2014]
    
    [90 rows x 0 columns]
    
    In [5]:
    df.loc[1946:]
    
    Out[5]:
    Empty DataFrame
    Columns: []
    Index: [1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 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, 2014]
    
    [69 rows x 0 columns]
    

    你尝试了什么:

    In [6]:
    df[1946:]
    
    Out[6]:
    Empty DataFrame
    Columns: []
    Index: []
    

    不会工作,因为这会查找名为 1946 的列

    所以要专门查找1946 之后的行,您必须使用1947,这假定您的索引中确实存在1947

    df.loc[1947:]
    

    【讨论】:

    • 完美!感谢工厂的快速响应
    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2022-10-12
    • 2016-06-05
    • 1970-01-01
    • 2016-10-06
    • 2014-11-26
    相关资源
    最近更新 更多