簡體   English   中英

如何從 Pandas DataFrame 中的一行中獲取值?

[英]How to get value from a row in Pandas DataFrame?

我有一個包含一行的 pandas 數據框。 我知道這一行中的列名是什么。 我想從該行的每個單元格中提取值(只是值,而不是類型或其他元數據)。 我該怎么做呢? 我正在使用 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 是 integer,ColumnName2 是 varchar

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

如果它是單行,你應該可以使用這樣的東西:

>>> 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

玩具示例

假設您有以下 DataFrame:

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 [10]: df.iloc[0,:]
Out[10]: 
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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM