如何让Pandas完整显示大型数据集?解决输出缺失行问题
问题描述
我正在处理一个超过十万行的大型Excel数据集,其中日期(格式如20231201)和时间(格式如1130)未按标准格式拆分。我已经编写了Pandas代码对日期和时间进行格式化,方便复制粘贴回Excel,但输出时始终缺失前3万行,请问是否可以设置无限输出层级?
原有代码
时间格式化代码
#this is the code for hours import pandas as pd df = pd.read_excel('/Volumes/PortableSSD/Università - Lavori/Progetto statistica/Definitivo 1223.xlsx') df['Scheduled departure'] = df['Scheduled departure'].astype(str) df['formatted_hour'] = df['Scheduled departure'].apply(lambda x: '{:0>4}'.format(x)) df['formatted_hour'] = df['formatted_hour'].apply(lambda x: f"{x[:2]}:{x[2:]}") # Display the formatted time print(df['formatted_hour'].to_string(index=True))
日期格式化代码
#this is the code for dates import pandas as pd df = pd.read_excel('/Volumes/PortableSSD/Università - Lavori/Progetto statistica/Definitivo 1223.xlsx') df['Date'] = df['Date'].astype(str) df['year'] = df['Date'].str[:4] df['month'] = df['Date'].str[4:6] df['day'] = df['Date'].str[6:] df['formatted_date'] = df['Date'].str[6:] + '/' + df['Date'].str[4:6] + '/' + df['Date'].str[:4] # Display the formatted date print(df['formatted_date'].to_string(index=False))
解决方案
Pandas默认会限制控制台输出的行数,这就是你看不到全部数据的原因。可以通过以下方式解决:
1. 取消Pandas输出行数限制
在代码开头添加配置,让Pandas显示所有行:
import pandas as pd # 设置显示所有行 pd.set_option('display.max_rows', None) # 若需要显示所有列,可添加 pd.set_option('display.max_columns', None)
将这段配置加入你原有的代码中,再执行print输出,就能看到完整的十万行数据了。
2. 优化代码(更高效处理大数据集)
原代码用apply循环处理每行数据,效率较低,推荐用Pandas的矢量化字符串操作替代,速度更快:
优化后的时间格式化代码
import pandas as pd pd.set_option('display.max_rows', None) df = pd.read_excel('/Volumes/PortableSSD/Università - Lavori/Progetto statistica/Definitivo 1223.xlsx') # 转字符串后补前导零到4位,再用正则分割为小时:分钟 df['formatted_hour'] = df['Scheduled departure'].astype(str).str.zfill(4).str.replace(r'(\d{2})(\d{2})', r'\1:\2', regex=True) # 输出所有行 print(df['formatted_hour'].to_string(index=True))
优化后的日期格式化代码
import pandas as pd pd.set_option('display.max_rows', None) df = pd.read_excel('/Volumes/PortableSSD/Università - Lavori/Progetto statistica/Definitivo 1223.xlsx') # 方法1:正则替换直接格式化 df['formatted_date'] = df['Date'].astype(str).str.replace(r'(\d{4})(\d{2})(\d{2})', r'\3/\2/\1', regex=True) # 方法2:转换为日期类型后格式化(更规范,能自动校验日期合法性) # df['formatted_date'] = pd.to_datetime(df['Date'].astype(str), format='%Y%m%d').dt.strftime('%d/%m/%Y') # 输出所有行 print(df['formatted_date'].to_string(index=False))
3. 更可靠的替代方案:直接导出到Excel
如果你的目的是把格式化后的数据导回Excel,完全没必要用print输出(控制台本身也可能有输出长度限制),直接用Pandas导出到新Excel文件更稳妥:
import pandas as pd df = pd.read_excel('/Volumes/PortableSSD/Università - Lavori/Progetto statistica/Definitivo 1223.xlsx') # 处理时间列 df['formatted_hour'] = df['Scheduled departure'].astype(str).str.zfill(4).str.replace(r'(\d{2})(\d{2})', r'\1:\2', regex=True) # 处理日期列(用规范的日期转换方法) df['formatted_date'] = pd.to_datetime(df['Date'].astype(str), format='%Y%m%d').dt.strftime('%d/%m/%Y') # 导出格式化后的列到新Excel文件 df[['formatted_date', 'formatted_hour']].to_excel('/Volumes/PortableSSD/Università - Lavori/Progetto statistica/Formatted_Data.xlsx', index=False)
内容的提问来源于stack exchange,提问作者Francesco Di Napoli
相关产品推荐
相关产品推荐

