- У меня есть CSV, который может иметь или не всегда иметь одинаковый порядок столбцов или заголовки (следовательно, необходимость вызывать столбцы по имени).
- Я использую панд для преобразования электронной таблицы вфрейм данных
- я изменяю фрейм данных на основе (надеюсь) модульных, масштабируемых логических значений
я восстанавливаю файл csv:
df.to_csv('csv / csv_out.csv')
Мне удалось загрузить CSV в кадр данных и условно изменить заголовок столбца (используя следующее:
df = pd.read_csv('csv/csv_in.csv', encoding='utf-8', engine='python', na_values=['.'])
if 'Column Title A' in df.columns:
df.rename(columns = {'Column Title A':'Column Title B'}, inplace = False)
но мне кажется, что я не понимаю синтаксиса, который используется при объединении нескольких операторов if / then, включающих как текстовые, так и числовые значения.
Я попытался df.ix;
dfmod_swheader = df.ix[(df['Column A'] == '12345') | (df['Column A'] == '54321') & 'Column Title B' in df.columns:]
, но последовательно получаю "недопустимое сравнение типов », которое я не могу понять достаточно, чтобы обойти.
Итак, спросите:
Могу ли я получить помощь в правильном синтаксисе для преобразования pandas dataframe, которое достигает следующего:
принять грузредактируемый кадр данных (из csv_in.csv):
Column Name A,Column Name B,Column Name Red,Column Name Blue
foo,234,bar,foobar
foo,Box,bar,foobar
foo,12,bar,foobar
foo,9,bar,foobar
foo,1,bar,foobar
foo,Frog,bar,foobar
foo,5567,bar,foobar
foo,12,bar,foobar
foo,a,bar,foobar
и преобразование его (в csv_out.csv):
Column Name A,Column Name C,Column Name B,Column Name Red,Column Name Blue
foo,,234,bar,foobar
foo,,Box,bar,foobar
foo,,12,bar,foobar
foo,,9,bar,foobar
,foo,1,bar,foobar
foo,,Frog,bar,foobar
foo,,5567,bar,foobar
foo,,12,bar,foobar
,foo,a,bar,foobar
с использованием следующей логики:
if 'column name a' exists and
'column name b has cell value' = 'numerical value 1' or 'text value a'
then move 'column name a cell value' to (new?) 'column name c',
placing 'column name c' directly to the right of 'column name a'