相关疑难解决方法(0)

如何迭代Pandas中的DataFrame中的行?

我有一只DataFrame熊猫:

import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df
Run Code Online (Sandbox Code Playgroud)

输出:

   c1   c2
0  10  100
1  11  110
2  12  120
Run Code Online (Sandbox Code Playgroud)

现在我想迭代这个帧的行.对于每一行,我希望能够通过列的名称访问其元素(单元格中的值).例如:

for row in df.rows:
   print row['c1'], row['c2']
Run Code Online (Sandbox Code Playgroud)

是否有可能在熊猫中做到这一点?

我发现了类似的问题.但它没有给我我需要的答案.例如,建议使用:

for date, row in df.T.iteritems():
Run Code Online (Sandbox Code Playgroud)

要么

for row in df.iterrows():
Run Code Online (Sandbox Code Playgroud)

但我不明白row对象是什么以及如何使用它.

python rows dataframe pandas

1551
推荐指数
28
解决办法
199万
查看次数

将pandas函数应用于列以创建多个新列?

如何在熊猫中做到这一点:

extract_text_features在单个文本列上有一个函数,返回多个输出列.具体来说,该函数返回6个值.

该函数有效,但似乎没有任何正确的返回类型(pandas DataFrame/numpy数组/ Python列表),以便输出可以正确分配 df.ix[: ,10:16] = df.textcol.map(extract_text_features)

所以我认为我需要回到迭代df.iterrows(),按照这个

更新:迭代df.iterrows()速度至少慢20倍,所以我投降并将函数拆分为六个不同的.map(lambda ...)调用.

更新2:这个问题是在v0.11.0左右回答的.因此,大部分问题和答案都不太相关.

python merge return-type multiple-columns pandas

181
推荐指数
11
解决办法
12万
查看次数

使用itertuples迭代pandas数据帧

我正在使用itertuples迭代一个pandas数据帧.我也想捕获行号.迭代时:

示例代码:

for row in df.itertuples():
    print row['name']
Run Code Online (Sandbox Code Playgroud)

预期产量:

1 larry
2 barry
3 michael
Run Code Online (Sandbox Code Playgroud)

这里1,2,3是行号.我想避免使用计数器并获取行号.有没有简单的方法来实现这个使用熊猫?

python pandas

17
推荐指数
3
解决办法
3万
查看次数

对Pandas数据帧中的每一行只运行一次函数

如果我有一个功能

def do_irreversible_thing(a, b):
    print a, b
Run Code Online (Sandbox Code Playgroud)

还有一个数据帧

df = pd.DataFrame([(0, 1), (2, 3), (4, 5)], columns=['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

对于pandas数据帧中的每一行,只 运行一次函数的最佳方法是什么?正如其他问题指出的那样,像df.apply pandas这样的东西会在第一行调用该函数两次.即使使用numpy

np.vectorize(do_irreversible_thing)(df.a, df.b)
Run Code Online (Sandbox Code Playgroud)

导致函数在第一行被调用两次,df.T.apply()或者df.apply(...,axis = 1).

有没有比这个显式循环更快或更清晰的方法来调用每一行的函数?

   for idx, a, b in df.itertuples():
       do_irreversible_thing(a, b)
Run Code Online (Sandbox Code Playgroud)

python numpy function pandas

14
推荐指数
2
解决办法
1万
查看次数

迭代熊猫系列元素的最佳方式

以下所有内容似乎都适用于迭代熊猫系列的元素。我相信有更多的方法可以做到这一点。有什么区别,哪种方法最好?

import pandas


arr = pandas.Series([1, 1, 1, 2, 2, 2, 3, 3])

# 1
for el in arr:
    print(el)

# 2
for _, el in arr.iteritems():
    print(el)

# 3
for el in arr.array:
    print(el)

# 4
for el in arr.values:
    print(el)

# 5
for i in range(len(arr)):
    print(arr.iloc[i])
Run Code Online (Sandbox Code Playgroud)

python pandas

8
推荐指数
1
解决办法
624
查看次数

在Pandas中更快地处理Dataframe

我正在尝试处理非常大的文件(10,000+观察),其中邮政编码不容易格式化.我需要将它们全部转换为前5位数,这是我当前的代码:

def makezip(frame, zipcol):
    i = 0
    while i < len(frame):
        frame[zipcol][i] = frame[zipcol][i][:5]
        i += 1
    return frame
Run Code Online (Sandbox Code Playgroud)

frame是数据帧,zipcol是包含邮政编码的列的名称.虽然这有效,但处理需要很长时间.有更快的方法吗?

python pandas

4
推荐指数
1
解决办法
241
查看次数

将每列中的值指定为该列的总和

我有DataFrame,我试图将每列中的所有值分配为该列的总和.

x = pd.DataFrame(data = [[1,2],[3,4],[5,6],[7,8],[9,10]],index=[1,2,3,4,5],columns=['a','b'])
x 
   a   b
1  1   2
2  3   4
3  5   6
4  7   8
5  9  10
Run Code Online (Sandbox Code Playgroud)

输出应该是

   a    b
1  25   30
2  25   30
3  25   30
4  25   30
5  25   30
Run Code Online (Sandbox Code Playgroud)

我想使用x.apply(f,axis = 0),但我不知道如何定义一个将列转换为lambda函数中所有列值之和的函数.以下行引发SyntaxError:无法分配给lambda

f = lambda x : x[:]= x.sum()
Run Code Online (Sandbox Code Playgroud)

python lambda pandas

4
推荐指数
2
解决办法
216
查看次数

大熊猫列表理解

我正在给一个玩具示例,但它会帮助我理解我正在尝试做的其他事情.假设我想要一个数据框'optimal_fruit'中的新列,即apple*orange - bananas.

我可以做这样的事情来获得它.

df2['optimal_fruit'] = df2['apples'] * df2['oranges'] - df2['bananas'] 


apples  oranges bananas optimal_fruit
1       6       11      -5
2       7       12      2
3       8       13      11
4       9       14      22
5       10      15      35
Run Code Online (Sandbox Code Playgroud)

如果我尝试做这样的事情会发生什么?我怎么能在列表理解中做到这一点?

df2['optimal_fruit'] = [x * y - z for x in df2['apples'] for y in df2['oranges'] for z in df2['bananas']]
Run Code Online (Sandbox Code Playgroud)

我得到一个错误:

ValueError:值的长度与索引的长度不匹配

一如既往,非常感谢你的帮助!

python list-comprehension pandas

3
推荐指数
1
解决办法
8608
查看次数

逐个循环数据帧(pandas)

假设我们有一个包含A,B和C列的数据框:

df = pd.DataFrame(columns =('A','B','C'), index=range(1))
Run Code Online (Sandbox Code Playgroud)

列包含三行数值:

0     A     B      C
1    2.1   1.8    1.6
2    2.01  1.81   1.58
3    1.9   1.84   1.52
Run Code Online (Sandbox Code Playgroud)

如何循环遍历从1到3的每一行,然后执行if语句,包括添加一些变量:

if B1 > 1.5
    calc_temp   = A1*10
    calc_temp01 = C1*-10
if B2 > 1.5 
    calc_temp   = A2*10
    calc_temp01 = C2*-10
if B3 >1.5
    calc_temp   = A3*10
    calc_temp01 = C3*-10
Run Code Online (Sandbox Code Playgroud)

甚至可能吗?它必须知道一系列的种类,即带有某种计数器的全范围数据集号,是吗?if语句应该引用该特定行.

python loops dataframe pandas

3
推荐指数
2
解决办法
2万
查看次数