Я использую код, который я получил от: Comparing and replacing values inside DataFramesПеребор файлов панды
main_df = pd.read_csv('main.txt', sep='|', encoding='utf-8')
data_df = pd.read_csv('data.csv', encoding='utf-8')
main_df_part = main_df[['PRIM_LAT_DEC', 'PRIM_LONG_DEC', 'FEATURE_NAME', 'STATE_ALPHA']]
main_df_part.columns = ['LAT', 'LONG', 'CITY', 'STATE']
main_df_part = main_df_part.set_index(['CITY', 'STATE'])
data_df = data_df.set_index(['CITY', 'STATE'])
data_df.update(main_df_part)
data_df.to_csv('data/new.csv', sep=',', mode='a')
У меня есть около 60 файлов, которые мне нужно пробежать. main_df
, я попытался следующие:
Резюмируя
- Concatnate файлы, но продолжал получать
pandas.parser.CParserError: Error tokenizing data. C error: out of memory
. - Использование chunksize, но это преобразует DataFrame в
pandas.io.parsers.TextFileReader
сделать некоторые из методов, которые я использовал недопустимый - Наконец я попытался перебором каждого файла и поместить правильный имя вместо
main.txt
но продолжал получатьException: cannot handle a non-unique multi-index!
при этом.
Это использует третий метод:
files = [f for f in os.listdir('./data') if os.path.isfile(os.path.join('./data', f))]
for w in files:
main_df = pd.read_csv(w, sep='|', low_memory=False, encoding='utf-8')
Любые идеи, как исправить ошибку многоиндексной?
Расширенная информация
Ошибка из метода 1:
Traceback (most recent call last):
File "C:/Users/Leb/Desktop/Python/py-script/geo_pandas.py", line 6, in <module>
main_df = pd.read_csv('data.txt', sep='|', low_memory=False, encoding='utf-8')
File "C:\Python34\lib\site-packages\pandas\io\parsers.py", line 474, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Python34\lib\site-packages\pandas\io\parsers.py", line 260, in _read
return parser.read()
File "C:\Python34\lib\site-packages\pandas\io\parsers.py", line 721, in read
ret = self._engine.read(nrows)
File "C:\Python34\lib\site-packages\pandas\io\parsers.py", line 1170, in read
data = self._reader.read(nrows)
File "pandas\parser.pyx", line 772, in pandas.parser.TextReader.read (pandas\parser.c:7581)
File "pandas\parser.pyx", line 858, in pandas.parser.TextReader._read_rows (pandas\parser.c:8532)
File "pandas\parser.pyx", line 1742, in pandas.parser.raise_parser_error (pandas\parser.c:20715)
pandas.parser.CParserError: Error tokenizing data. C error: out of memory
Ошибка из метода 2:
Traceback (most recent call last):
File "C:/Users/Leb/Desktop/Python/py-script/geo_pandas.py", line 11, in <module>
main_df_part = main_df[['PRIM_LAT_DEC', 'PRIM_LONG_DEC','FEATURE_NAME', 'STATE_ALPHA']]
TypeError: 'TextFileReader' object is not subscriptable
ошибки от метода 3:
Traceback (most recent call last):
File "C:/Users/Leb/Desktop/Python/py-script/geo_pandas.py", line 32, in <module>
data_df.update(main_df_part)
File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 3416, in update
other = other.reindex_like(self)
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 1564, in reindex_like
return self.reindex(**d)
File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 2511, in reindex
**kwargs)
File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 1773, in reindex
method, fill_value, copy).__finalize__(self)
File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 2470, in _reindex_axes
fill_value, limit)
File "C:\Python34\lib\site-packages\pandas\core\frame.py", line 2477, in _reindex_index
limit=limit)
File "C:\Python34\lib\site-packages\pandas\core\index.py", line 4929, in reindex
"cannot handle a non-unique multi-index!")
Exception: cannot handle a non-unique multi-index!
Просьба указать точную трассировку для каждого элемента, который вы пробовали. – Manhattan
Пройдет секунда, но я буду над этим работать. – Leb
Я собираюсь рискнуть для метода 3: 'main_df_part' имеет два индекса, которые точно такие же. Просканируйте его. Возможно, у вас есть комбинация «город-государство», которая появляется не один раз в одном из ваших файлов. – Manhattan