从数据框中选择特定值

时间:2017-01-29 20:04:24

标签: python pandas

我正在尝试从数据框中选择一个值。但问题是输出是数据类型和列名。 这是我从csv文件中读取的数据框,

Name,Code
blackberry,1
wineberry,2
rasberry,1
blueberry,1
mulberry,2

这是我的测试代码 -

dataFrame=pd.read_csv("test.csv")
value = dataFrame.loc[dataFrame['Name'] == 'rasberry']['Code']
print(value)
strvalue=str(value)
if(strvalue=="1"):
    print("got it")

value的预期输出为1

2  1\nName: Code, dtype: int64

这就是if条件不起作用的原因。我怎样才能获得具体的价值? 我正在使用pandas

2 个答案:

答案 0 :(得分:4)

您获得的是一个Series对象。您可以使用.iloc从中提取值:

value.iloc[0]
# 1

或者您可以使用.values提取基础numpy数组,然后使用index提取值:

value.values[0]
# 1

答案 1 :(得分:2)

打破

  1. dataFrame['Name']返回pd.Series
  2. dataFrame['Name'] == 'rasberry'返回pd.Series dtype bool
  3. dataFrame.loc[dataFrame['Name'] == 'rasberry']使用布尔pd.Series切片dataFrame,返回pd.DataFrame <{1}}
  4. 的子集dataFrame
  5. dataFrame.loc[dataFrame['Name'] == 'rasberry']['code']pd.Series,它是来自第3步的切片数据框中名为'code'的列。
    • 如果您希望'Name'列中的元素是唯一的,那么这将是一行pd.Series
    • 您想要内部元素,但此时'value'['value']
    • 之间存在差异
  6. 设置

    from io import StringIO
    
    txt = """Name,Code
    blackberry,1
    wineberry,2
    rasberry,1
    blueberry,1
    mulberry,2"""
    

    将(S)

    使用iloc获取第一个值

    dataFrame=pd.read_csv(StringIO(txt))
    value = dataFrame.query('Name == "rasberry"').Code.iloc[0]
    print(value)
    

    使用iat获取第一个值

    dataFrame=pd.read_csv(StringIO(txt))
    value = dataFrame.query('Name == "rasberry"').Code.iat[0]
    print(value)
    

    在csv中读取时指定索引列并使用loc

    dataFrame=pd.read_csv(StringIO(txt), index_col='Name')
    value = dataFrame.loc['rasberry', 'Code']
    print(value)
    

    在csv中读取时指定索引列并使用at

    dataFrame=pd.read_csv(StringIO(txt), index_col='Name')
    value = dataFrame.at['rasberry', 'Code']
    print(value)
    

    在csv中读取时指定索引列并使用get_value

    dataFrame=pd.read_csv(StringIO(txt), index_col='Name')
    value = dataFrame.get_value('rasberry', 'Code')
    print(value)
    
    如果只存在一个非索引列,则

    在读取csv和squeeze时指定索引列

    series=pd.read_csv(StringIO(txt), index_col='Name', squeeze=True)
    value = series.rasberry
    print(value)