[英]Pandas Read Excel: how to access a given cell by column and row numbers
使用Pandas模块和read_excel函数,我可以给从excel文件中读取的每一列分配一个数字分配作为列标题,因此可以使用g_int_c=str(df1['Unnamed: 1'][6])
代替引用Excel文件中的一部分数据,我可以使用g_int_c=str(df1[1][6])
吗?
示例代码如下:
import pandas as pd
with pd.ExcelFile(inputFile,
sheetname=['pnl1 Data ','pnl2 Data','pnl3 Data','pnl4 Data']) as xlsx:
df1 = pd.read_excel(xlsx, 'pnl1 Data ',skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])#assign column headers
df2 = pd.read_excel(xlsx, 'pnl2 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])
df3 = pd.read_excel(xlsx, 'pnl3 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])
df4 = pd.read_excel(xlsx, 'pnl4 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])
要获取漂亮的列名而不是默认值(例如'Unnamed: 1'
使用pd.read_excel
的names
参数。 必要的修改,请尝试更换
with pd.ExcelFile(inputFile,
sheetname=['pnl1 Data ','pnl2 Data','pnl3 Data','pnl4 Data']) as xlsx:
df1 = pd.read_excel(xlsx, 'pnl1 Data ',skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])#assign column headers
df2 = pd.read_excel(xlsx, 'pnl2 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])
df3 = pd.read_excel(xlsx, 'pnl3 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])
df4 = pd.read_excel(xlsx, 'pnl4 Data', skiprows=9, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'])
与
sheets = ['pnl1 Data','pnl2 Data','pnl3 Data','pnl4 Data']
df = pd.read_excel(inputFile, sheetname=sheets, skiprows=9, parse_cols="B:H",
names=list('BCDEFG'))
df = {i: df[sheet] for i, sheet in enumerate(sheets, 1)}
这将使df
成为dict,其键为工作表编号,其值为DataFrames。 DataFrame的列名称将为B
到G
,与原始Excel文件类似。
因此,您不必引用编号为df1
,..., df4
变量(通常是一个坏主意 ),而可以将所有DataFrame保存在dict df
并且可以通过数字索引访问它们: df[1]
, ..., df[4]
。 例如,工作表pnl3 Data
将作为df[3]
访问。
要访问第七行,您可以使用工作表'pnl1 Data'
的B
列值:
g_int_c = str(df[1].loc[6, 'B'])
例如,
import pandas as pd
try: from cStringIO import StringIO # for Python2
except ImportError: from io import StringIO # for Python3
import textwrap
df1 = pd.read_csv(StringIO(textwrap.dedent("""
,,,
0,1,2,3
1,4,5,6
7,8,9,10""")))
df2 = pd.read_csv(StringIO(textwrap.dedent("""
,,,
0,NULL,2,3
1,4,NULL,NULL""")), converters={i:str for i in range(4)})
sheets = ['pnl1 Data','pnl2 Data']
writer = pd.ExcelWriter('/tmp/output.xlsx')
for df, sheet in zip([df1, df2], sheets):
print(df)
# Unnamed: 0 Unnamed: 1 Unnamed: 2 Unnamed: 3
# 0 0 NULL 2 3
# 1 1 4 NULL NULL
df.to_excel(writer, sheet)
writer.save()
df = pd.read_excel('/tmp/output.xlsx', sheetname=sheets, names=list('ABCD'), parse_cols="A:E")
df = {i: df[sheet] for i, sheet in enumerate(sheets, 1)}
for key, dfi in df.items():
print(dfi)
# A B C D
# 0 0 1 2 3
# 1 1 4 5 6
# 2 7 8 9 10
# A B C D
# 0 0 NaN 2.0 3.0
# 1 1 4.0 NaN NaN
print(df[1].loc[1, 'B'])
# 4
从您的问题看来,这不是关于在导入时为列分配数字值,而是关于如何通过列号和行号访问表的给定单元格,这是一个有关如何索引或切片一个表的问题。整数的数据帧。
在您的示例中,您提到要引用df1[1][6]
。 您可以使用.iloc
做到这.iloc
。
# spin up a df
df = pd.DataFrame(np.random.randint(0,10,size=(7, 7)), columns=list('ABCDEFG'))
print df
输出:
A B C D E F G
0 0 7 7 8 8 2 2
1 8 2 9 1 6 8 1
2 5 3 5 5 9 2 7
3 7 4 2 1 1 5 0
4 0 4 4 1 9 7 1
5 4 2 7 7 9 7 2
6 0 6 7 8 1 4 1
现在使用.iloc
通过整数索引:
df.iloc[1,6]
输出:
1
返回上面的代码,您很可能将其更改为以下代码:
g_int_c=str(df.iloc[1,6])
对于一般参考,这里是有关对数据帧进行索引和切片的文档: http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-integer
这个问答可能会有所帮助: 如何在Pandas中按数字获取列?
header=None,names=[0,1,2,3,4,5,6]
有效。
with pd.ExcelFile(inputFile,
sheetname=['pnl1 Data ','pnl2 Data','pnl3 Data','pnl4 Data']) as xlsx:
df1 = pd.read_excel(xlsx, 'pnl1 Data ',skiprows=10, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'],header=None,names=[0,1,2,3,4,5,6])#assign column headers
df2 = pd.read_excel(xlsx, 'pnl2 Data', skiprows=10, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'],header=None,names=[0,1,2,3,4,5,6])
df3 = pd.read_excel(xlsx, 'pnl3 Data', skiprows=10, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'],header=None,names=[0,1,2,3,4,5,6])
df4 = pd.read_excel(xlsx, 'pnl4 Data', skiprows=10, parse_cols="B:H", keep_default_na='FALSE', na_values=['NULL'],header=None,names=[0,1,2,3,4,5,6])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.