在Pandas中对列求和(无科学计数法、无NaN)并加入DataFrame导出CSV
解决DataFrame添加汇总统计并导出CSV的问题
看来你已经搞定了基础的DataFrame,现在就差把下载量总和、总传输数据这两个统计结果加进去,还要处理NaN和避免科学计数法对吧?咱们一步一步来解决:
第一步:计算统计量(处理NaN+规避科学计数法)
首先计算总和时,要确保自动跳过NaN值(sum()默认已经开启skipna=True,明确写出来更清晰),同时为了避免科学计数法干扰,我们可以提前设置Pandas的显示规则,或者直接对结果做格式化:
import pandas as pd # 全局设置:避免科学计数法,整数显示为整数值,浮点数保留2位小数 pd.set_option('display.float_format', lambda x: '%.0f' % x if x.is_integer() else '%.2f' % x) # 计算下载量总和(自动跳过NaN) total_downloads = df1['downloads'].sum(skipna=True) # 计算总Size并转换为GB(如果按1000进制计算可以用10**9,按需选择) total_size_gb = df1['Size'].sum(skipna=True) / (1024 ** 3)
第二步:把统计结果加入原DataFrame
我们可以构造一条汇总行,然后把它追加到原DataFrame的末尾:
# 构造汇总行的字典,标记清楚这是统计总行 summary_row = { 'downloads': total_downloads, 'url_info_hostname': 'Total', 'date': '2018-03-01', # 和原数据日期保持一致 'Size': total_size_gb } # 把字典转成单个行的DataFrame summary_df = pd.DataFrame([summary_row]) # 合并原DataFrame和汇总行,重置索引避免重复 df_with_summary = pd.concat([df1, summary_df], ignore_index=True)
第三步:导出带统计的CSV
导出时可以额外指定float_format,确保CSV文件里的数值不会出现科学计数法:
# 导出CSV,index=False不导出索引列,float_format控制浮点数值格式 df_with_summary.to_csv('download_stats.csv', index=False, float_format='%.2f')
额外小提示
如果不想修改全局显示格式,也可以在计算结果时直接格式化,比如把total_downloads转成整数(如果结果是整数的话),或者用f-string转成字符串,但这样会改变列的数据类型,按需选择即可。
内容的提问来源于stack exchange,提问作者chowpay
相关产品推荐
相关产品推荐

