У MySQL нет внутреннего типа данных типа boolean. Он использует наименьший целочисленный тип данных - TINYINT.
BOOLEAN и BOOL являются эквивалентами TINYINT (1), поскольку они являются синонимами.
Попробуйте создать эту таблицу -
CREATE TABLE table1 (
column1 BOOLEAN DEFAULT NULL
);
Затем запустите SHOW CREATE TABLE, вы получите этот выход -
CREATE TABLE `table1` (
`column1` tinyint(1) DEFAULT NULL
)
Я думаю, что read_csv
не может этого сделать, идея с usecols
также не работает:
import pandas as pd
temp=u"""D;B;A;C
0;a;4;7;1
1;b;5;8;3
2;c;4;9;5
3;d;5;4;7
4;e;5;2;1
5;f;4;3;0"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep=";", usecols=['A', 'B', 'C', 'D'])
print (df)
D B A C
0 0 a 4 7
1 1 b 5 8
2 2 c 4 9
3 3 d 5 4
4 4 e 5 2
5 5 f 4 3
Решение - изменить порядок по списку или по индексу сортировки:
[ 111] <час>df = df.sort_index(axis=1)
print (df)
A B C D
0 4 a 7 0
1 5 b 8 1
2 4 c 9 2
3 5 d 4 3
4 5 e 2 4
5 4 f 3 5
Один из методов заключается в том, чтобы читать по одному столбцу за раз и сохранять в виде списка и concat
результат:
In[121]:
t="""D,B,A,C
4,2,1,3"""
cols = list('ABCD')
pd.concat([pd.read_csv(io.StringIO(t), usecols=[x]) for x in cols], axis=1)
Out[121]:
A B C D
0 1 2 3 4
Однако я думаю, что проще просто отсортировать его по подпунктам -выбирая столбцы в том порядке, который вы хотите после прочтения в обычном режиме:
df = df[['A','B','C','D']]
Я предполагаю, что вы не спрашиваете, как изменить порядок столбцов в Pandas, но хотели бы изменить его перед чтением, возможно, чтобы уменьшить использование памяти. (Если не видите ответа @ jezrael.)
Лучше всего сделать это с csv
перед чтением в Панд. Пример:
import csv
with open('file.csv', 'r') as infile, open('reordered.csv', 'a') as outfile:
fieldnames = ['A', 'B', 'C', 'D']
writer = csv.DictWriter(outfile, fieldnames=fieldnames)
writer.writeheader()
for row in csv.DictReader(infile):
writer.writerow(row)
Взято из здесь
С точки зрения времени, самое быстрое это сделать как CSV (я тестировал с очень маленьким CSV-файлом): [117 ]
%%time
df = pd.read_csv('r.csv')[['A', 'B', 'C', 'D']]
CPU times: user 3.53 ms, sys: 1.48 ms, total: 5 ms
Wall time: 3.79 ms
%%time
df=pd.read_csv('r.csv')[df.columns[::-1]]
CPU times: user 4.75 ms, sys: 2.01 ms, total: 6.76 ms
Wall time: 5.13 ms
%%time
cols=list('ABCD')
pd.concat([pd.read_csv('r.csv', usecols=[x]) for x in cols], axis=1)
CPU times: user 8.98 ms, sys: 2.25 ms, total: 11.2 ms
Wall time: 9.88 ms
%%time
df = pd.read_csv('r.csv').sort_index(axis=1)
CPU times: user 4.21 ms, sys: 1.88 ms, total: 6.09 ms
Wall time: 4.65 ms
%%time
with open('r.csv', 'r') as infile, open('reordered.csv', 'a') as outfile:
fieldnames = ['A', 'B', 'C', 'D']
writer = csv.DictWriter(outfile, fieldnames=fieldnames)
writer.writeheader()
for row in csv.DictReader(infile):
writer.writerow(row)
df = pd.read_csv('reordered.csv')
CPU times: user 3.29 ms, sys: 1.91 ms, total: 5.2 ms
Wall time: 3.83 ms