Python - 启动空数据框并从另一个数据框填充

时间:2017-01-06 14:35:19

标签: python pandas dataframe

使用python pandas 0.19。

我想创建一个新的数据帧(df2)作为现有数据帧(df1)的子集。 df1看起来像这样:

In [1]: df1.head()
Out [1]:
    col1_name    col2_name    col3_name
0          23           42           55
1          27           55           57
2          52           20           52
3          99           18           53   
4          65           32           51

逻辑是:

df2 = []

for i in range(0,N):
    loc = some complicated logic
    df1_sub = df1.ix[loc,]
    df2.append(df1_sub)

df2 = pd.DataFrame.from_records(df2)

结果df2确实是一个数据帧,但内容全部由df1的列名组成。它看起来像这样:

In [2]: df2.head()
Out [2]:
    col1_name    col2_name    col3_name
0   col1_name    col2_name    col3_name
1   col1_name    col2_name    col3_name
2   col1_name    col2_name    col3_name
3   col1_name    col2_name    col3_name
4   col1_name    col2_name    col3_name

我知道这可能与从列表到数据框的转换有关,但我不确定我到底错过了什么。或者有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

根据Ted Petrou,解决方案很简单:

pd.concat(df2)

我对df2的数据类型感到困惑。

鉴于for循环中的逻辑,使用某个索引直接选择df1是不可能的。

答案 1 :(得分:0)

如何对数据帧进行切片?

import pandas as pd
DF1 = pd.DataFrame()
DF1['x'] = ['a','b','c','a','c','b']
DF1['y'] = [1,3,2,-1,-2,-3]

DF2 = DF1[[(x == 'a' and y > 0) for x,y in zip(DF1['x'], DF1['y'])]]

这应该比附加更有效。 DF1 [复杂条件]采用任何布尔争论

答案 2 :(得分:0)

你可以利用pandas'(实际上是numpy的)蒙面数组。

import pandas as pd

df1 = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': ['a', 'b', 'c', 'd', 'e'],
                    'c': [10, 11, 12, 13, 14]})

#      a  b   c
#   0  1  a  10
#   1  2  b  11
#   2  3  c  12
#   3  4  d  13
#   4  5  e  14

我们假设df2应该是df1的一个子集:它应该有b列和c列,而只有列a的列{}均值:

df2 = df1[df1['a'] % 2 == 0][['b', 'c']]
#    b   c
# 1  b  11
# 3  d  13