将excel转换为csv时乱码的代码修改以及时间戳的去除
表格内容原始长这样
用下述代码将表格转换为csv时,直接用pandas转换,一直乱码,很奇怪
# coding:utf-8
import pandas as pd
# 读取Excel文件
df = pd.read_excel("C:/Users/19024/Desktop/excel1.xlsx")
# 将DataFrame保存为UTF-8编码的CSV文件
df.to_csv("C:/Users/19024/Desktop/csv1.csv", index=False, encoding='utf-8')
输出的csv数据也是乱码的
因此,换一种转换方式,成功了
# coding:utf-8
import pandas as pd
# 读取Excel文件,这里使用'openpyxl'引擎来处理xlsx文件
df = pd.read_excel("C:/Users/19024/Desktop/主动学习数据处理过程/final5471.xlsx", engine='openpyxl')
# 尝试将所有列转换为字符串类型,以确保在写入CSV时不会出现编码问题
df = df.applymap(str)
# 将DataFrame保存为UTF-8编码的CSV文件
# 使用'utf-8-sig'编码以支持BOM,有助于某些程序正确识别编码
csv_file_path = "C:/Users/19024/Desktop/主动学习数据处理过程/weihebing5471.csv"
df.to_csv(csv_file_path, index=False, encoding='utf-8-sig')
# 打印出转换后的CSV文件路径
print(f"CSV file has been saved to: {csv_file_path}")
另外,去除评论中的时间戳和匹配数量的代码如下:
import pandas as pd
import re
# 读取Excel文件
df = pd.read_excel("C:/Users/19024/Desktop/time.xlsx", engine='openpyxl')
# 定义一个函数,用于检查comment_count和pinglun是否匹配
# 如果不匹配或任一列为空,则返回False
def is_valid_row(row):
return row['comment_count'] == row['pinglun'] and not pd.isnull(row['comment_count']) and not pd.isnull(row['pinglun'])
# 定义一个正则表达式来匹配单独的日期或与地点相连的日期
# 这个表达式会匹配形如"MM-DD"或"MM-DD地点"的模式
date_pattern = re.compile(r'\b(\d{2}-\d{2})([\u4e00-\u9fa5\s]*)')
# 定义一个函数,用于移除comment列中的时间戳
def remove_timestamps(text):
if pd.isnull(text):
return text
# 使用正则表达式替换掉时间戳及其后的可选地点
return date_pattern.sub('\2', text).strip()
# 应用函数,移除时间戳
df['comment'] = df['comment'].apply(remove_timestamps)
# 过滤掉comment_count和pinglun不匹配的行
df = df[df.apply(is_valid_row, axis=1)]
# 将清洗后的DataFrame保存为新的CSV文件
df.to_csv("C:/Users/19024/Desktop/notime.csv", index=False, encoding='utf-8-sig')
# 打印结果查看
print(df.head())