利用Python将csv文件按照某列分成小csv

需求:网上下载的csv文件,包含的几十万的数据,想要根据MMSI的值分为不同的csv文件
主要步骤:

  • read_csv:读取存放所有数据的csv文件
  • drop_duplicates:去掉重复的数据(默认为所有特征值匹配才相同)
  • groupby:按照MMSI特征值进行分组
  • 对分组后的数据逐行进行写入

遇到的主要问题:

  • 分组后的每一组数据,如何写入不同的csv文件中。解决使用的是to_csv
  • 写入文件后,发现每隔一行写一行数据,将模式改为“ab+”即mode=“ab+”
  • 若是多次写入一个文件,会重复,因此每次写入前,若是文件中存在数据,进行清空

下面是代码:

# 将存放轨迹数据的excel文件按照,船的编号拆分为多个
def break_excel_MMSI():
    x_head_key = ['MMSI', 'BaseDateTime', 'LAT', 'LON', 'SOG', 'COG', 'Heading', 'VesselName', 'IMO', 'CallSign',
                  'VesselType', 'Status', 'Length', 'Width', 'Draft', 'Cargo']

    csv_file = 'F:\\myPythonProject\\boatJsonData\\AIS_2016_12_Zone06\\AIS_ASCII_by_UTM_Month\\2016\\AIS_2016_12_Zone06.csv'

    df = pd.read_csv(csv_file, header=0)
    df.columns = x_head_key

    # 去掉重复数据
    ind_frame = df.drop_duplicates(keep='first')

    # 对数据进行分组处理
    grouped = df.groupby(x_head_key[0])  # according different categories to group by the df

    file = 'F:\\myPythonProject\\boatJsonData\\AIS_2016_12_Zone06\\AIS_ASCII_by_UTM_Month\\2016\\track_by_mmic\\'

    for value, group in grouped:
        filename = file + str(value) + '.csv'
        try:
            f = open(filename, 'w')
            if f:
                # 清空文件内容
                f.truncate()

            # 将新数据写入文件
            group.to_csv(filename, header=x_head_key, index=False, mode='ab+')
        except UnicodeEncodeError:
            print("编码错误, 该数据无法写到文件中, 直接忽略该数据")


猜你喜欢

转载自blog.csdn.net/baidu_38271024/article/details/88207428