如何从多列获取数据并使用pandas将其保存在列表中?

时间:2017-07-20 07:00:12

标签: python pandas

我需要帮助才能将某些列的数据放入列表中。

假设我有这个test.txt文件

30012    820202    999201
81910    882101    100291
88271    003300    221920
93929    719300

我想在单独的列表中保存偶数列和奇数列的数据。

我尝试了以下但没有得到我想要的正确答案。

import pandas as pd

fileRead = pd.read_fwf("test.txt", delim_whitespace = True, header=None, dtype=object)

indx = 0
for indx in range(len(fileRead.columns)):
    if indx % 2 == 1:
        channel1 = fileRead[indx].tolist()

    else:
        channel0 = fileRead[indx].tolist()

print "CH0:" + channel0
print "CH1:" + channel1 

这产生了

CH1: ['820202', '882101', '003300', '719300']
CH0: ['999201', '100291', '221920', nan]

我想要的结果是

CH1: ['820202', '882101', '003300', '719300']
CH0: ['30012','81910','88271','93929','999201', '100291', '221920', nan]

我在这个剧本中错过了什么?感谢您的帮助和建议。

2 个答案:

答案 0 :(得分:1)

选项1
您可以使用iloc

ch0 = fileRead.iloc[:, 0::2].stack().tolist()
ch1 = fileRead.iloc[:, 1::2].stack().tolist()

而不是stack我可以使用numpy的{​​{1}}。但是,我决定使用堆栈来利用它的隐式ravel。这更依赖于dropna'api,并且更加透明。

选项2
我们可以依靠pandas以及

numpy
v = fileRead.values

ch0 = v[:, 0::2].ravel()
ch0 = ch0[~np.isnan(ch0)].tolist()

ch1 = v[:, 1::2].ravel()
ch1 = ch1[~np.isnan(ch1)].tolist()
ch0

['30012', '999201', '81910', '100291', '88271', '221920', '93929']

答案 1 :(得分:1)

您可以valuesdf转换为arrays,然后选择列并使用numpy.ravel进行展平。上次致电tolist

a = df.values
ch0 = a[:, ::2].ravel().tolist()
ch1 = a[:, 1::2].ravel().tolist()
print (ch0)
['30012', '999201', '81910', '100291', '88271', '221920', '93929', nan]

print (ch1)
['820202', '882101', '003300', '719300']