首页 > 解决方案 > 如何从 Pandas DataFrame 中的一行获取值?

问题描述

我有一个包含一行的熊猫数据框。我知道这一行中的列名是什么。我想从该行的每个单元格中提取值(只是值,而不是类型或其他元数据)。我该怎么做呢?我正在使用 Python 3。

我尝试了以下方法,但总是失败,因为您不能使用列。

print(data_frame.head().values['ColumnName'])

所以然后我尝试了这个,它给了我 ColumnName 的值,但随后崩溃了。

print(data_frame.iloc[0]['ColumnName'])

文件“/usr/local/lib/python3.8/dist-packages/pandas/core/indexing.py”,第 895 行,在getitem中 返回 self._getitem_axis(maybe_callable,axis=axis) 文件“/usr/local/lib /python3.8/dist-packages/pandas/core/indexing.py”,第 1501 行,在 _getitem_axis self._validate_integer(key, axis) 文件“/usr/local/lib/python3.8/dist-packages/pandas/ core/indexing.py",第 1444 行,在 _validate_integer 中引发 IndexError("single positional indexer is out-of-bounds") IndexError: single positional indexer is out-of-bounds

如果我遍历它,我可以让它工作,但我不需要或不想要这个,因为我只有一行。

for x in data_frame.itertuples(index=False):
     print(x.ColumnName1)
     print(x.ColumnName2)

我还能够得到一些东西来为我提供价值以及一堆其他元数据,但不幸的是我不记得我用什么代码来获得它。

我想要做的就是这样并获得 ColumnName 的值。

data_frame[0]['ColumnName']

这可能吗?

编辑这里是代码。它调用 SQL 数据库中的存储过程。

    query = "EXEC p_get_data @id = '{0}'".format(id)
connection_string = get_connection_string()
engine = sqlalchemy.create_engine(connection_string)
data_frame = pd.read_sql_query(query, engine)
data_frame.reset_index(inplace=True)

#print(data_frame.loc[0]['ColumnName1'])
#print(data_frame.loc[0, 'ColumnName1'])
#print(data_frame['ColumnName1'].values[0])
#print(data_frame['ColumnName1'].iloc[0])
#print(data_frame.iat[0, data_frame.columns.get_loc('ColumnName1')])
print(data_frame['ColumnName1'][0] )

存储过程

ALTER PROCEDURE [dbo].[p_get_data]
    @id varchar(200)
AS
    SELECT A.ColumnName1, E.ColumnName2 
    FROM E (NOLOCK)
    INNER JOIN A (NOLOCK) ON E.PrimaryKey = A.PrimaryKey
    WHERE Id = @id
      AND A.Type = 'test' 

数据如下所示:(ColumnName1 是一个整数,ColumnName2 是一个 varchar

ColumnName1     ColumnName2
---------------------------
1               ABCDE1234

标签: pythonpython-3.xpandasdataframe

解决方案


如果它是单行,你应该可以使用这样的东西:

>>> data_frame['colName'].values[0]
Out[8]: 1

或者,

>>> data_frame['colName'].iloc[0]
Out[9]: 1

或者,

>>> data_frame.iloc[0, data_frame.columns.get_loc('colName')]
Out[11]: 1

或者,

>>> data_frame.iat[0, data_frame.columns.get_loc('colName')]
Out[12]: 1

或者,

>>> data_frame.loc[0, 'colName']
Out[13]: 1

推荐阅读