使用Pandas提取Excel单元格生成元组失败,仅获首行及NaN值
解决Excel单元格数据提取为元组的问题
我来帮你排查代码里的问题,顺便给出正确的实现方式~
问题根源:误解了iterrows()的返回值
你用iterrows()循环时,每次迭代返回的是**(行索引, 该行的Series对象)**这个元组。你的内层循环for i in row:会把行索引和整个Series对象直接加入列表,而不是遍历Series里的每个单元格值。这就导致你拿到的不是实际的单元格数据,还混入了索引和NaN(Series里未填充的位置会显示NaN)。
正确实现方式
这里有两种简单的方法可以达到你的需求:
方法1:用NumPy扁平化数组(最简洁)
直接把DataFrame转成一维数组,再转成元组,行优先遍历所有单元格:
import pandas as pd fm = pd.read_excel("File", sheet_name='Sheet1') # 扁平化所有单元格值,dropna=False保留原有的NaN(如果不需要可以去掉) all_cells = fm.to_numpy().flatten() mytuple = tuple(all_cells) print(mytuple)
如果想把NaN替换成空字符串或其他默认值,可以先处理:
all_cells = fm.fillna("").to_numpy().flatten()
方法2:修正循环逻辑(如果你偏好手动遍历)
解构iterrows()的返回值,然后遍历每行的具体值:
import pandas as pd fm = pd.read_excel("File", sheet_name='Sheet1') L = [] # 解构出索引和行数据Series for index, row_data in fm.iterrows(): # 遍历该行的所有单元格值 for value in row_data.values: L.append(value) mytuple = tuple(L) print(mytuple)
这样就能正确提取所有单元格的数据,按行顺序组成元组啦~
内容的提问来源于stack exchange,提问作者Asael Bar Ilan
相关产品推荐
相关产品推荐

