将多个列表水平组合到一个列表中

时间:2015-03-27 19:23:43

标签: python sqlite pandas

我在python中搜索过这个问题,但找不到我正在寻找的内容。

假设我有以下示例:

date_list = [Mar 27 2015, Mar 26 2015, Mar 25 2015]
num_list_1 = [22, 35, 7]
num_list_2 = [15, 12, 2]

如何组合列表,以便最终结果如下:

combined_list = [Mar 27 2015, 22, 15
                 Mar 26 2015, 35, 12
                 Mar 25 2015, 7, 2]

一旦我在combined_list变量中有数据,我希望能够将它传递给for循环并迭代每一行并将其插入我的SQLite数据库(如果日期不存在)或更新现有记录发现日期。

我有单独的列表,我有数据库插入工作。我不确定的是合并列表的正确方法。我在寻找熊猫数据框吗?或其他什么?

任何能够指引我朝正确方向发展的指示都将不胜感激

2 个答案:

答案 0 :(得分:4)

在三个列表中使用zip(我已经更正了date_list' s格式,原始帖子没有使用正确的字符串):

>>> date_list = ["Mar 27 2015", "Mar 26 2015", "Mar 25 2015"]
>>> num_list_1 = [22, 35, 7]
>>> num_list_2 = [15, 12, 2]
>>> list(zip(date_list, num_list_1, num_list_2))
[('Mar 27 2015', 22, 15), ('Mar 26 2015', 35, 12), ('Mar 25 2015', 7, 2)]

作为一个单独的列表,使用简单的列表理解与zip:

>>> [item for items in zip(date_list, num_list_1, num_list_2) for item in items]
['Mar 27 2015', 22, 15, 'Mar 26 2015', 35, 12, 'Mar 25 2015', 7, 2]

注意:这个答案不依赖于熊猫,如果您正在寻找在熊猫中这样做的方法,请查看@ EdChum的答案。

答案 1 :(得分:1)

如果你想在数据帧中使用它,那么你可以用列表作为列值来构造一个dict:

In [10]:

date_list = ['Mar 27 2015', 'Mar 26 2015', 'Mar 25 2015']
num_list_1 = [22, 35, 7]
num_list_2 = [15, 12, 2]

df = pd.DataFrame({'Date':date_list, 'num1':num_list_1, 'num2':num_list_2})
In [11]:

df['Date']  = pd.to_datetime(df['Date'])
df
Out[11]:
        Date  num1  num2
0 2015-03-27    22    15
1 2015-03-26    35    12
2 2015-03-25     7     2
In [12]:

df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 3 columns):
Date    3 non-null datetime64[ns]
num1    3 non-null int64
num2    3 non-null int64
dtypes: datetime64[ns](1), int64(2)
memory usage: 96.0 bytes