小编Ale*_*xSB的帖子

使用其他列中两个计算值的最大值创建 Pandas 列

我想创建一个列,其中的最大值介于从数据框的其他列计算得出的 2 个值之间。

import pandas as pd
df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})

df['Max Col'] = max(df['A']*3, df['B']+df['A'])


ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)

期望的结果是一个新的 df 列 ['Max Col'],其中包含上述计算的最大值。

我知道有一个很长的解决方案,即通过计算创建两个新列,然后应用.max(axis=1)。我正在寻找一个直接的解决方案。

谢谢。

python max dataframe pandas

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

to_sql熊猫数据帧转换为SQL Server错误:DatabaseError

尝试将pandas'数据帧写入时sql-server,出现此错误:

DatabaseError:在SQL'SELECT name FROM sqlite_master WHERE type ='table'AND name = ?;'上执行失败;(:('42S02',“ [42S02] [Microsoft] [SQL Server Native Client 11.0] [SQL Server]无效的对象名'sqlite_master'。(208)(SQLExecDirectW); [42000] [Microsoft] [SQL Server本机客户端11.0] [SQL Server]声明无法准备。(8180)“)

似乎pandas正在寻找sqlite而不是真正的数据库。

这不是一个连接问题,因为我可以从阅读sql-server与使用相同的连接pandas.read_sql 已使用设置连接

sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
Run Code Online (Sandbox Code Playgroud)

这也不是数据库权限问题,因为我可以使用与以下相同的连接参数逐行编写:

cursor = conn.cursor()
cursor.execute('insert into test values (1, 'test', 10)')
conn.commit()
Run Code Online (Sandbox Code Playgroud)

我可以编写一个循环逐行插入一个循环,但是我想知道为什么to_sql它对我不起作用,我深信它不会那么有效。

环境:: Python2.7 Pandas:0.20.1 sqlalchemy:1.1.12

提前致谢。

可运行的示例

import pandas as pd
from sqlalchemy import create_engine
import urllib

params = …
Run Code Online (Sandbox Code Playgroud)

python sql dataframe python-2.7 pandas

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

在Pandas DataFrame上更新行子集的列值的有效方法?

使用Pandas更新行的特定子集的列的值时,最佳方法是什么?

简单的例子:

import pandas as pd

df = pd.DataFrame({'name' : pd.Series(['Alex', 'John', 'Christopher', 'Dwayne']),
                   'value' : pd.Series([1., 2., 3., 4.])})
Run Code Online (Sandbox Code Playgroud)

目标:value根据名称长度和value列本身的初始值更新该列。

以下代码实现了目标:

df.value[df.name.str.len() == 4 ] = df.value[df.name.str.len() == 4] * 1000
Run Code Online (Sandbox Code Playgroud)

但是,此行在LHS和RHS中两次对整个数据帧进行过滤。我认为这不是最有效的方法。它并没有做到“就地”。

基本上我正在寻找与R data.table':='运算符等效的熊猫:

df[nchar(name) == 4, value := value*1000]
Run Code Online (Sandbox Code Playgroud)

对于其他类型的操作,例如:

df[nchar(name) == 4, value := paste0("short_", as.character(value))]
Run Code Online (Sandbox Code Playgroud)

环境: Python 3.6 Pandas 0.22

提前致谢。

python pandas

5
推荐指数
2
解决办法
1332
查看次数

按行值索引列表中的熊猫新列

我希望在 Pandas 数据框中创建一个新列,其中包含由 df 行值过滤的列表值。

df = pd.DataFrame({'Index': [0,1,3,2], 'OtherColumn': ['a', 'b', 'c', 'd']})

   Index OtherColumn
      0           a
      1           b
      3           c
      2           d

l = [1000, 1001, 1002, 1003]
Run Code Online (Sandbox Code Playgroud)

期望的输出:

  Index OtherColumn  Value
      0           a   -
      1           b   -
      3           c   1003
      2           d   - 
Run Code Online (Sandbox Code Playgroud)

我的代码:

df.loc[df.OtherColumn == 'c', 'Value'] = l[df.Index]
Run Code Online (Sandbox Code Playgroud)

它返回错误,因为 'df.Index' 不被识别为 int 而是一个列表(不是由 OtherColumn == 'c' 过滤)。

对于 R 用户,我正在寻找:

df[OtherColumn == 'c', Value := l[Index]]
Run Code Online (Sandbox Code Playgroud)

谢谢。

python filter dataframe pandas

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

标签 统计

pandas ×4

python ×4

dataframe ×3

filter ×1

max ×1

python-2.7 ×1

sql ×1