簡體   English   中英

如何使用 Pandas - Python 從 Excel 中讀取某些列

[英]how to read certain columns from Excel using Pandas - Python

我正在閱讀 Excel 工作表,我想閱讀某些列:第 0 列,因為它是行索引,以及第 22:37 列。 現在這是我所做的:

import pandas as pd
import numpy as np
file_loc = "path.xlsx"
df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], parse_cols = 37)
df= pd.concat([df[df.columns[0]], df[df.columns[22:]]], axis=1)

但我希望有更好的方法來做到這一點! 我知道如果我做parse_cols=[0, 22,..,37]我能做到,但對於大型數據集,這沒有意義。

我也這樣做了:

s = pd.Series(0)
s[1]=22
for i in range(2,14):
    s[i]=s[i-1]+1
df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], parse_cols = s)

但它讀取前 15 列,即s的長度。

您可以像這樣使用列索引(字母):

import pandas as pd
import numpy as np
file_loc = "path.xlsx"
df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], usecols="A,C:AA")
print(df)

相應的文件

usecols : int, str, list-like, or callable default None

  • 如果沒有,則解析所有列。

  • 如果 str,則表示 Excel 列字母和列范圍的逗號分隔列表(例如“A:E”或“A,C,E:F”)。 范圍包括雙方。

  • 如果是 int 列表,則表示要解析的列號列表。

  • 如果是字符串列表,則表示要解析的列名列表。

    0.24.0 版中的新功能。

  • 如果可調用,則根據它評估每個列名並在可調用返回 True 時解析該列。

根據上述行為返回列的子集。

0.24.0 版中的新功能。

parse_cols已棄用,請改用usecols

那是:

df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], usecols = "A,C:AA")

“usecols”應該有所幫助,使用列范圍(根據excel工作表,A,B ...等)下面是示例

1. 選定的列

df = pd.read_excel(file_location,sheet_name='Sheet1', usecols="A,C,F")

2. 列范圍和選定列

df = pd.read_excel(file_location,sheet_name='Sheet1', usecols="A:F,H")

3. 多個范圍

df = pd.read_excel(file_location,sheet_name='Sheet1', usecols="A:F,H,J:N")

4. 列范圍

df = pd.read_excel(file_location,sheet_name='Sheet1', usecols="A:N")

如果您知道列的名稱並且不想使用 A、B、D 或 0、4、7。 這實際上有效

df = pd.read_excel(url)[['name of column','name of column','name of column','name of column','name of column']]

其中“列名稱”= 想要的列。 區分大小寫和空格

讀取 excel 中任意列的數據

import pandas as pd


name_of_file =  "test.xlsx"
data = pd.read_excel(name_of_file)

required_colum_name = "Post test Number"
print(data[required_colum_name])

不幸的是,這些方法似乎仍然在返回子選擇之前讀取和轉換標題。 我有一個 Excel 表,其中包含重復的 header 名稱,因為該表包含幾個相似的表。 我想單獨閱讀這些表格,所以我想應用usecols 但是,這仍然會為重復的列名添加后綴。

重現:

  • 在 A、B、C、D 列下創建一個名為 Header1、Header2、Header1、Header2 的 Excel 工作表
  • df.read_excel(filename, usecols='C:D')

df.columns將返回['Header1.1', 'Header2.1']

除了拆分和加入生成的標頭之外,有沒有辦法避免這種情況? 特別是當不知道是否有重復的列時,重命名它們是很棘手的,因為在 '.' 上拆分。 可能正在破壞一個非重復的 header。

編輯:此外,基於列子集的 DataFrame 的長度(以索引表示)將由完整文件的長度決定。 因此,如果 A 列有 10 行,而 B 列只有 5 行,則usecols='B'生成的 DataFrame 將有 10 行,其中 5 行用 NaN 填充。

暫無
暫無

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

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