Python 如何从数据帧中的行中获取值?
我有一个包含一行的熊猫数据框。我知道这一行的列名是什么。我想从此行的每个单元格中提取值(只是值,而不是类型或其他元数据)。我该怎么做?我正在使用Python3 我尝试了以下方法,但总是失败,因为您无法使用列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
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'