Я делю большой файл CSV (содержащий финансовые данные о запасах) на более мелкие куски. Формат файла CSV отличается. Что-то вроде сводной таблицы Excel. Первые несколько строк первого столбца содержат несколько заголовков.
Название компании, идентификатор и т. Д. Повторяются в следующих столбцах. Поскольку одна компания имеет более одного атрибута, не то чтобы одна компания имела только один столбец.
После первых нескольких строк столбцы начинают напоминать типичный фрейм данных, в котором заголовки находятся в столбцах, а не в строках.
В любом случае, я пытаюсь разрешить Пандам разрешать дублирование заголовков столбцов, а не добавлять «.1», «.2», «.3» и т. Д. После заголовков. Я знаю, что Pandas изначально этого не разрешает, есть ли обходной путь? Я попытался установить header = None в read_csv, но он выдает ошибку токенизации, которая, я думаю, имеет смысл. Я просто не могу придумать легкий путь.

import pandas as pd
csv_path = "C:\\Users\\ThirdHandBD\\Desktop\\Data Splitting\\pd-split\\chunk4.csv"
#df = pd.read_csv(csv_path, header=1, dtype='unicode', sep=';', low_memory=False, error_bad_lines=False)
df = pd.read_csv(csv_path, header = 1, dtype='unicode', sep=';', index_col=False)
print("I read in a dataframe with {} columns and {} rows.".format(
len(df.columns), len(df)
))
filename = 1
#column increment
x = 30 * 59
for column in df:
loc = df.columns.get_loc(column)
if loc == (x * filename) + 1:
y = filename - 1
a = (x * y) + 1
b = (x * filename) + 1
date_df = df.iloc[:, :1]
out_df = df.iloc[:, a:b]
final_df = pd.concat([date_df, out_df], axis=1, join='inner')
out_path = "C:\\Users\\ThirdHandBD\\Desktop\\Data Splitting\\pd-split\\chunk4-part" + str(filename) + ".csv"
final_df.to_csv(out_path, index=False)
#out_df.to_csv(out_path)
filename += 1
# This should be the same as df, but with only the first column.
# Check it with similar code to above.
EDIT:
С, https://github.com/pandas-dev/pandas/issues/19383, Я добавляю:
final_df.columns = final_df.iloc[0]
final_df = final_df.reindex(final_df.index.drop(0)).reset_index(drop=True)
Итак, полный код:
import pandas as pd
csv_path = "C:\\Users\\ThirdHandBD\\Desktop\\Data Splitting\\pd-split\\chunk4.csv"
#df = pd.read_csv(csv_path, header=1, dtype='unicode', sep=';', low_memory=False, error_bad_lines=False)
df = pd.read_csv(csv_path, header = 1, dtype='unicode', sep=';', index_col=False)
print("I read in a dataframe with {} columns and {} rows.".format(
len(df.columns), len(df)
))
filename = 1
#column increment
x = 30 * 59
for column in df:
loc = df.columns.get_loc(column)
if loc == (x * filename) + 1:
y = filename - 1
a = (x * y) + 1
b = (x * filename) + 1
date_df = df.iloc[:, :1]
out_df = df.iloc[:, a:b]
final_df = pd.concat([date_df, out_df], axis=1, join='inner')
out_path = "C:\\Users\\ThirdHandBD\\Desktop\\Data Splitting\\pd-split\\chunk4-part" + str(filename) + ".csv"
final_df.columns = final_df.iloc[0]
final_df = final_df.reindex(final_df.index.drop(0)).reset_index(drop=True)
final_df.to_csv(out_path, index=False)
#out_df.to_csv(out_path)
filename += 1
# This should be the same as df, but with only the first column.
# Check it with similar code to above.
Теперь весь первый ряд пропал. Но ожидаемый вывод для строки заголовка должен быть заменен индексом сброса, без ".1", ".2" и т. Д.
Скриншот:
Строка SimFin ID больше не существует.
