我有一个Excel文件(.xlsx),其中包含带有某些值等于“#N / A”的工作表。
使用熊猫将Excel工作表作为DataFrame读取时,“#N / A”值将解释为NaN。
根据pandas.read_excel指南,我希望可以通过添加keep_default_na=False
参数将'#N / A'照原样读取到DataFrame中。
不幸的是,'#N / A'仍被解释为NaN。
以下是使用的代码:
df = pd.read_excel(io='TestWorkbook.xlsx',
sheet_name="Sheet1",
keep_default_na=False)
结果:
似乎keep_default_na=False
处理'N / A'和'NA'值,而不是'#N / A'。
您知道将“#N / A”原样读取到DataFrame中的任何解决方法吗?
答案 0 :(得分:1)
这是因为Excel不会将B列中的#N/A
值存储为字符串。如果您注意到这些#N/A
单元格是居中对齐的,则有一个直观的指示。
熊猫不会区分不同类型的Excel错误:#N/A
/ #NUM!
/ #NAME?
/ #VALUE!
等都将以NaN
的形式出现。这很有意义,对于每个Excel错误,没有并行的Python / C类型。
因此,简而言之,pd.read_excel
除了用特定字符串覆盖 all 错误之外,您无能为力。 '#N/A'
,并通过在Excel中打开文件来丢失对找到的特定错误类型的所有了解:
df['Column2'] = df['Column2'].fillna('#N/A')
替代方法是 force Excel使用文本值,例如通过插入Excel单元格:
=TEXT("#N/A", "")
然后使用pd.read_excel
和keep_default_na=False
进行读取。这似乎比其应有的麻烦还要多。
答案 1 :(得分:0)
尝试:
df = pd.read_excel(
io='TestWorkbook.xlsx',
sheet_name="Sheet1",
na_values='', keep_default_na=False
)
如果指定keep_default_na=False
,则na_values
中给出的值将覆盖默认的NA值。由于您的NA值在默认NA值中,因此您需要指定一些na_values='some_dummy_na_value'
,使用它来覆盖默认NA值。
例如,如果您想继续将N/A
和NA
解释为NA值(同时将#N/A
保留为字符串),则可以在na_values
中指定它们参数:
df = pd.read_excel(
io='TestWorkbook.xlsx',
sheet_name="Sheet1",
na_values=['N/A', 'NA'], keep_default_na=False
)