我有一列包含需要拆分并适合其他列的值:
column_ex = [Tony, Male,25, Salesman, Jane, Female, 32, Nurse, Bob, Male, 33, Engineer]
我还有一个数据框:
column_headers = ['name','gender','age','job']
df = pd.DataFrame(columns = column_headers)
我想采用 column_ex 并采用每 4 个值来适应我的数据框。我该怎么做呢? R好像有
as.data.frame(split(data, 1:x))
谢谢!
您可以使用 numpy 的 split 在读入数据帧之前分割数据:
#convert column_headers to numpy array
column_ex = np.array(column_ex)
#split into equal numbers
n = len(column_ex)/4
split_data = np.split(column_ex,n)
#read split data into a dataframe
df = pd.DataFrame(split_data, columns = column_headers)
另一个选项是 itertool 的 slice 和 range 的组合:
from itertools import islice
split = [islice(column_ex,part,part+4)
for part in
range(0,len(column_ex),4)]
df = pd.DataFrame(split,columns = column_headers)
或者,您可以使用 toolz partition 方法:
from toolz import partition
#split data
split_data = partition(4,column_ex)
#read split_data into dataframe
df = pd.DataFrame(split_data, columns = column_headers)
print(df)
name gender age job
0 Tony Male 25 Salesman
1 Jane Female 32 Nurse
2 Bob Male 33 Engineer
我认为这可以解决问题,它将动态分配每一列,但对于大列,它可能会很慢
count = 0
for i in range(len(column_headers)):
df.loc[:, column_headers[i]] = [column_ex[x] for x in range(count, len(column_ex), 4)]
count += 1
其他解决方案可以使用 numpy 和
reshape
方法完成,效率更高:
import numpy as np
np_array = np.array(column_ex)
df = pd.DataFrame(np_array.reshape((-1, 4)), columns=column_headers)