Riv*_*ers 5

编辑:请参阅下面的基准以获取稍快的解决方案。

你可以这样做:

# 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)
Run Code Online (Sandbox Code Playgroud)

输出:

A
D
B
E
C
F
Run Code Online (Sandbox Code Playgroud)

new_df将是一个pandas.DataFrame.

注意使用df.to_numpy()也。

正如@Michael Szczesny 所建议的,你可以这样做:

new_series = df.stack().reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)

这将返回一个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
Run Code Online (Sandbox Code Playgroud)

使用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”将按照它们在内存中出现的顺序读取元素。