编辑:请参阅下面的基准测试以获得稍快的解决方案。
你可以这样做:
# Import pandas library
import pandas as pd
# The data
data = [["A", "D"], ["B", "E"], ["C", "F"]]
# Create DataFrame
df = pd.DataFrame(data, columns = ["Column1", "Column2"])
# Flatten and convert to DataFrame
new_df = pd.DataFrame(df.to_numpy().flatten())
print(df)
输出:
A
D
B
E
C
F
new_df 将是 pandas.DataFrame。
还要注意df.to_numpy() 的使用。
正如@Michael Szczesny 所建议的,您可以这样做:
new_series = df.stack().reset_index(drop=True)
这将返回pandas.Series。
添加基准:
根据@Mayank Porwal 的回答,我添加了这个基准测试结果。
我将 timeit.repeat 与repeat = 7, number = 10000 一起使用。
从最快到最慢排序:
new_df = pd.DataFrame(df.to_numpy().ravel('A')) # 51.0 µs
new_df = pd.DataFrame(df.to_numpy().ravel('K')) # 51.0 µs
new_df = pd.DataFrame(df.to_numpy().ravel('F')) # 51.1 µs
new_df = pd.DataFrame(df.to_numpy().flatten()) # 52.6 µs
new_df = pd.DataFrame(df.to_numpy().ravel('C')) # 53.4 µs
new_series = df.stack().reset_index(drop=True) # 322.0 µs
使用numpy.ravel 最快主要是因为它返回一个视图,而numpy..to_numpy() 返回一个副本。
有关numpy.ravel 的详细信息,请参阅:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.ravel.html
简而言之,如果数组在内存中是 Fortran 连续的,“A”将强制以类似 Fortran 的索引顺序读取元素,而“K”将按照元素在内存中出现的顺序读取元素。