从数据框中选择特定的值
从数据框中选择特定的值
我想从数据框中选择一个值。但问题是输出结果包含数据类型和列名。
这是我从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`。
在处理数据框时,有时候我们需要从中选择特定的值。然而,有时候我们会遇到一些问题,即无法直接从数据框中选择特定的值。下面我们来看看这个问题的出现原因以及解决方法。
当我们选择特定的值时,我们得到的是一个Series对象。例如,我们可以使用`.iloc`来从中提取值:
value.iloc[0] # 1
另外,我们也可以使用`.values`来提取底层的numpy数组,然后使用索引来提取值:
value.values[0] # 1
出现这个问题的原因是,当我们从数据框中选择特定的值时,返回的是一个Series对象。这是因为数据框是由多个Series对象构成的,每个Series对象代表数据框中的一列。因此,我们需要使用特定的方法来从Series对象中提取出我们需要的值。
解决这个问题的方法有两种。第一种方法是使用`.iloc`方法,它允许我们通过索引位置来选择值。通过传入索引位置0,我们可以提取出Series对象中的第一个值。
第二种方法是使用`.values`方法。这个方法将返回底层的numpy数组,我们可以通过索引来提取值。在这种情况下,我们可以通过传入索引位置0来提取数组中的第一个值。
我们可以通过使用`.iloc`或`.values`方法来从数据框中选择特定的值。这些方法允许我们从Series对象中提取值,以满足我们的需求。
选择数据框中特定值的问题是由于以下原因引起的:
1. `dataFrame['Name']` 返回一个 `pd.Series` 对象。
2. `dataFrame['Name'] == 'rasberry'` 返回一个 `pd.Series` 对象,其 `dtype` 为 `bool`。
3. `dataFrame.loc[dataFrame['Name'] == 'rasberry']` 使用布尔类型的 `pd.Series` 对象对 `dataFrame` 进行切片,返回一个子集的 `pd.DataFrame` 对象。
4. `dataFrame.loc[dataFrame['Name'] == 'rasberry']['code']` 是一个 `pd.Series` 对象,表示切片后的数据框中名为 `'code'` 的列。
- 如果你期望 `'Name'` 列中的元素是唯一的,则这将是一个只有一行的 `pd.Series` 对象。
- 你想要的元素在这一点上是 `'value'` 和 `['value']` 之间的区别。
解决这个问题的方法有以下几种:
1. 使用 `iloc` 获取第一个值:
dataFrame=pd.read_csv(StringIO(txt)) value = dataFrame.query('Name == "rasberry"').Code.iloc[0] print(value)
2. 使用 `iat` 获取第一个值:
dataFrame=pd.read_csv(StringIO(txt)) value = dataFrame.query('Name == "rasberry"').Code.iat[0] print(value)
3. 在读取 csv 文件时指定索引列,并使用 `loc`:
dataFrame=pd.read_csv(StringIO(txt), index_col='Name') value = dataFrame.loc['rasberry', 'Code'] print(value)
4. 在读取 csv 文件时指定索引列,并使用 `at`:
dataFrame=pd.read_csv(StringIO(txt), index_col='Name') value = dataFrame.at['rasberry', 'Code'] print(value)
5. 在读取 csv 文件时指定索引列,并使用 `get_value`:
dataFrame=pd.read_csv(StringIO(txt), index_col='Name') value = dataFrame.get_value('rasberry', 'Code') print(value)
6. 在读取 csv 文件时指定索引列,并使用 `squeeze` 将其转换为系列(如果只有一个非索引列):
series=pd.read_csv(StringIO(txt), index_col='Name', squeeze=True) value = series.rasberry print(value)