У меня есть следующий набор данных:
1 8 15 22
2 9 16 23
3 10 17 24
4 11 18 25
5 12 19 26
6 13 20 27
7 14 21 28
Я хочу получить следующий результат:
1
2
3
4
5
6
7
8
...
23
24
25
26
27
28
Поэтому я хочу перебрать все столбцы моего набора данных и объединить каждый столбец в первый.
import pandas as pd
df = pd.read_csv("data.csv", delimiter=";", header=-1)
number_of_columns= len(df.columns)
print(number_of_columns)
for i in range (1,number_of_columns):
df1 = df.iloc[:,i]
df2 = pd.concat([df,df1], ignore_index=True)
print(df2)
При этом только последний столбец конкатенируется в конечном кадре данных. Я получаю, что df2 перезаписывается на каждой итерации цикла for.
Итак, как я могу "сохранить" df2 после каждого цикла for, чтобы каждый столбец был объединен?
Большое спасибо!
Для столбцов
stack
+ tolist
df.stack().tolist()
[1,
8,
15,
22,
2,
9,
16,
23,
3,
10,
17,
24,
4,
11,
18,
25,
5,
12,
19,
26,
6,
13,
20,
27,
7,
14,
21,
28]
Для рядовых
melt
df.melt().value.tolist()
[1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28]
unstack
+ tolist
df.unstack().tolist()
#outputs same as above
просто np.flatten(),
pd.Series(df.values.flatten())
(or)
pd.Series(df.unstack().values)
Возможно, вам не нужна библиотека сторонних разработчиков. Вы можете использовать модули csv
и itertools
из стандартной библиотеки, чтобы вернуть список чисел:
from io import StringIO
from itertools import chain
import csv
mystr = StringIO("""1 8 15 22
2 9 16 23
3 10 17 24
4 11 18 25
5 12 19 26
6 13 20 27
7 14 21 28""")
with mystr as fin:
reader = csv.reader(mystr, skipinitialspace=True, delimiter=' ')
res = list(map(int, chain.from_iterable(zip(*reader))))
print(res)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28]
Вы также можете это сделать:
txt = '''1 8 15 22
2 9 16 23
3 10 17 24
4 11 18 25
5 12 19 26
6 13 20 27
7 14 21 28'''
arr1 = np.fromstring(txt, dtype=int, sep=' ')
arr1.reshape(7,-1).flatten(order = 'F') # for column wise, 'C' can be used for row wise.
df.unstack()