【问题标题】:Read Excel Rows Using Pandas like Xlrd module使用 Pandas 像 Xlrd 模块读取 Excel 行
【发布时间】:2020-09-15 02:46:27
【问题描述】:

在这个例子中,我展示了两种读取 excel 文件和打印数据的方法。 我不想同时使用这两种方式,而是想像使用 xlrd 模块一样使用 pandas 模块来输出数据。 我想遍历列/行并将其附加到数组(Col_B3, Col_C3, Col_D3) 我该怎么做?

import xlrd
import pandas as pd
import io

path = r'C:\Temp Files\My_Excel_File.xlsx'

''' USING XLRD '''
#open workbook
inputWorkbook = xlrd.open_workbook(path)
#open first sheet
Sheet = inputWorkbook.sheet_by_index(0)

Col_B3 = []
Col_C3 = []
Col_D3 = []

for row in range(2 ,Sheet.nrows):
    Col_B3.append(Sheet.cell_value(row, 1))
    Col_C3.append(Sheet.cell_value(row, 2))
    Col_D3.append(Sheet.cell_value(row, 3))

print(Col_B3)    
print(Col_C3)
print(Col_D3)


''' USING PANDAS '''
df = pd.read_excel(path)

print(df)

XLRD 输出

['Col_B3', 1.0, 2.0, 3.0, 4.0]
['Col_C3', 'Jack', 'Jill', 'Peter', 'Jade']
['Col_D3', 1200.0, 875.0, 120.0, 4230.0]

熊猫输出

   Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3
0         NaN        NaN        NaN        NaN
1         NaN     Col_B3     Col_C3     Col_D3
2         NaN          1       Jack       1200
3         NaN          2       Jill        875
4         NaN          3      Peter        120
5         NaN          4       Jade       4230

【问题讨论】:

    标签: python excel pandas xlrd


    【解决方案1】:

    使用 XLRD,您可以更好地控制在读取数据时如何处理数据。Pandas 会按原样读取数据;您的第一列是空的,与第一行相同。您的数据也是列格式,因此 Pandas 以列方式读取。

    您可以使用 Pandas 将其重塑为列表形式:

    res = (df.dropna(how='all') #remove completely empty rows
          .dropna(how='all',axis=1) #remove completely empty columns
          .T #flip columns into row position
          #convert to list    
          .to_numpy()
          .tolist()
          )
    
    print(res)
    
    [['Col_B3', '1', '2', '3', '4'],
     ['Col_C3', 'Jack', 'Jill', 'Peter', 'Jade'],
     ['Col_D3', '1200', '875', '120', '4230']]
    

    【讨论】:

      【解决方案2】:

      试试这个,我已经在电子表格中重新创建了你的数据。

      import pandas as pd
      import numpy as np
      
      df = pd.read_excel(r"C:\Temp Files\My_Excel_File.xlsx")
      #drop column name
      df=df.drop(["Unnamed: 0"],axis=1)
      #drop na
      df=df.dropna(axis=0)
      
      # remove all non-integer values
      df = df[df.applymap(np.isreal).any(1)]
      
      #Map column names
      
      df.columns = ["Col_B3","Col_C3","Col_D3"]
      
      #print results
      print(df)
      
      Col_B3 Col_C3 Col_D3
      2      1   Jack   1200
      3      2   Jill    875
      4      3  Peter    120
      5      4   Jade   4320
      

      【讨论】:

        猜你喜欢
        • 2021-05-03
        • 1970-01-01
        • 2012-09-24
        • 2021-02-02
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 2020-12-27
        相关资源
        最近更新 更多