Python处理VOIP分析CSV:筛选指定通话数据及时间格式转换
最优方案:使用Pandas处理VOIP CSV数据
Pandas是处理这类批量CSV数据的最优选择——它专为结构化数据处理设计,无需打开文件即可直接读写、筛选,对时间格式的转换和处理也非常便捷,完全适配你的需求。
具体实现步骤
安装Pandas
执行命令完成安装:pip install pandas核心代码实现
假设你的CSV中,状态列名为status,通话时长列名为duration,代码示例如下:import pandas as pd # 读取CSV文件(大文件可添加chunksize参数分块处理,比如chunksize=10000) df = pd.read_csv('voip_data.csv') # 将时长字符串转换为总秒数(整数) df['duration_seconds'] = pd.to_timedelta(df['duration']).dt.total_seconds().astype(int) # 应用筛选规则 filtered_df = df[ df['status'].isin(['Answered', 'Terminating']) & (df['duration_seconds'] <= 30) ] # 保存筛选后的结果到新CSV filtered_df.to_csv('filtered_voip_data.csv', index=False)
关键细节说明
- 时间格式转换:
pd.to_timedelta()可以直接识别HH:MM:SS格式的字符串,dt.total_seconds()将其转换为总秒数,再用astype(int)转为整数,完全满足你对时间转整数的需求。如果遇到特殊格式的时间字符串,也可以自定义函数处理:def duration_to_seconds(dur_str): h, m, s = map(int, dur_str.split(':')) return h * 3600 + m * 60 + s df['duration_seconds'] = df['duration'].apply(duration_to_seconds) - 大文件处理:如果数据量极大导致内存不足,可使用分块读取避免内存溢出:
chunk_size = 10000 filtered_chunks = [] for chunk in pd.read_csv('voip_data.csv', chunksize=chunk_size): chunk['duration_seconds'] = pd.to_timedelta(chunk['duration']).dt.total_seconds().astype(int) filtered_chunk = chunk[ chunk['status'].isin(['Answered', 'Terminating']) & (chunk['duration_seconds'] <= 30) ] filtered_chunks.append(filtered_chunk) # 合并所有分块结果 filtered_df = pd.concat(filtered_chunks) filtered_df.to_csv('filtered_voip_data.csv', index=False) - 库的选择对比:
openpyxl主要用于读写Excel文件(.xlsx),处理CSV并非其强项,效率远低于Pandas;xlsxwriter仅支持写入Excel,无法读取和筛选数据,完全不符合你的需求;- Pandas则是CSV数据处理的专业工具,语法简洁、性能高效,能完美覆盖你的所有需求。
内容的提问来源于stack exchange,提问作者Lucas Corey-Yares
相关产品推荐
相关产品推荐

