Python 如何从数据帧中的行中获取值?

Python 如何从数据帧中的行中获取值?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个包含一行的熊猫数据框。我知道这一行的列名是什么。我想从此行的每个单元格中提取值(只是值,而不是类型或其他元数据)。我该怎么做?我正在使用Python3 我尝试了以下方法,但总是失败,因为您无法使用列 print(data_frame.head().values['ColumnName']) 然后我尝试了这个,它给了我ColumnName的值,但后来崩溃了 print(data_frame.iloc[0]['ColumnName']) 文件“/usr/local/lib/python3

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

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

print(data_frame.head().values['ColumnName'])
然后我尝试了这个,它给了我ColumnName的值,但后来崩溃了

print(data_frame.iloc[0]['ColumnName'])
文件“/usr/local/lib/python3.8/dist packages/pandas/core/index.py”,第895行,位于getitem 返回self.\u getitem\u axis(可能可调用,axis=axis) 文件“/usr/local/lib/python3.8/dist-packages/pandas/core/index.py”,第1501行,在GETIMET轴中 自我验证整数(键、轴) 文件“/usr/local/lib/python3.8/dist-packages/pandas/core/index.py”,第1444行,在_-validate_-integer中 提升索引器(“单位置索引器超出范围”) 索引器:单个位置索引器超出范围

我可以让它工作,如果我循环通过它,但我不需要或想要这个,因为我只有一行

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
如果是单行, 您应该可以使用以下内容:

>>数据帧['colName']。值[0]
Out[8]:1
或者

数据帧['colName'].iloc[0] Out[9]:1 或者

>>data\u frame.iloc[0,data\u frame.columns.get\u loc('colName')]
Out[11]:1
或者

>>data\u frame.iat[0,data\u frame.columns.get\u loc('colName')]
Out[12]:1
或者

>data\u frame.loc[0,'colName']
Out[13]:1
玩具示例 假设您有以下数据帧:

In [1]: import pandas as pd
In [5]: df = pd.DataFrame({"ColumnName1":[1],"ColumnName2":['text']})
那么你有:

In [6]: df
Out[6]: 
   ColumnName1 ColumnName2
0            1        text
来自单行的值 如果要从第一行获取值,只需使用:

In [9]: df.iloc[0]
Out[9]: 
ColumnName1       1
ColumnName2    text
Name: 0, dtype: object
或:

如果您想获得数组,可以使用:

In [11]: df.iloc[0].values
Out[11]: array([1, 'text'], dtype=object)
来自单个单元格的值 如果需要单个单元格中的值,只需使用:

In [14]: df.iloc[0,0]
Out[14]: 1

In [15]: df.iloc[0,1]
Out[15]: 'text'
甚至是:

In [22]: df.ColumnName1[0]
Out[22]: 1

In [23]: df.ColumnName2[0]
Out[23]: 'text'

所有这些都因“indexer:单位置索引器超出范围;类型错误”而失败。我甚至包括了输出,它们似乎都工作正常…尝试将数据添加到问题中原因可能是索引,尝试重置索引。
data\u frame.reset\u index(inplace=True)
刚刚编辑了问题。我在使用reset_索引时遇到了相同的错误。我遇到的错误是因为我循环了一些值并多次调用存储过程。其中一次返回了长度为0的数据帧。这是索引超出范围的原因。感谢您的帮助。请尝试以下操作:data_frame['ColumnName'][0]
In [22]: df.ColumnName1[0]
Out[22]: 1

In [23]: df.ColumnName2[0]
Out[23]: 'text'