小编sin*_*047的帖子

在 Anaconda 中导入 psycopg2 显示 ModuleNotFoundError: No module named 'psycopg2'

我已经在 git bash 中安装了 psycopg2。我使用的是 windows 7、python 3.6 和 Anaonda 1.7.0

$ pip install psycopg2 收集 psycopg2 下载 psycopg2-2.7.4-cp36-cp36m-win32.whl (853kB) 100% |???????????????????????? ????????| 860kB 937kB/s 安装收集包:psycopg2 成功安装 psycopg2-2.7.4

$ easy_install psycopg2 搜索 psycopg2 最佳匹配:psycopg2 2.7.4 将 psycopg2 2.7.4 添加到 easy-install.pth 文件

使用 c:\users\shihab\appdata\local\programs\python\python36-32\lib\site-packages 处理 psycopg2 的依赖项 完成 psycopg2 的处理依赖项

有人遇到过同样的问题吗?

python psycopg2 anaconda

5
推荐指数
0
解决办法
3529
查看次数

列中缺少/NaT 值时如何转换日期格式

我有几个日期列,我想将它们转换为月/日/年格式。假设 test 是日期列之一 - 下面的代码有效。

dfq['test1'] = dfq['test1'].apply(lambda x: x.strftime('%m/%d/%Y'))
Run Code Online (Sandbox Code Playgroud)

但是,当列中缺少作为 'NaT' 的值时,它会显示错误 ValueError: NaTType 不支持 strftime 。我创建了一个样本数据集,并有意将一个缺失值保留为 ' ' 。在这种情况下,它也会显示错误。

我想保留缺失值或 NaT 值,因此无法删除它们。还有其他办法吗?

另一个问题,如果我想同时转换我所有的日期列(比如 test1、test、test3), - 有没有办法在使用 lambda/strftime 时做到这一点?

python date missing-data python-3.x pandas

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

在 Pandas/python 中使用 .loc 嵌套 if 语句

我在像下面的代码这样的条件语句中使用 if 。如果 address 是 NJ,则 name 列的值更改为“N/A”。

df1.loc[df1.Address.isin(['NJ']), 'name'] = 'N/A'
Run Code Online (Sandbox Code Playgroud)

如果我有像下面这样的“嵌套 if 语句”,我该怎么做?

# this not code just representing the logic
if address isin ('NJ', 'NY'):
    if name1 isin ('john', 'bob'):
        name1 = 'N/A' 
    if name2 isin ('mayer', 'dylan'):
        name2 = 'N/A'
Run Code Online (Sandbox Code Playgroud)

我可以使用实现上述逻辑df.loc吗?或者有其他方法可以做到吗?

python if-statement dataframe python-3.x pandas

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

如何使用Pandas Python获取数据框中每一列的最大长度

我有一个数据框,其中大多数列都是varchar / object类型。柱的长度变化很大,并且可以在3-1000+范围内。现在,对于每一列,我想测量最大长度。

我知道如何计算col的最大长度。如果是varchar,则:

max(df.char_col.apply(len))
Run Code Online (Sandbox Code Playgroud)

如果其编号(float8或int64),则:

max(df.num_col.map(str).apply(len))
Run Code Online (Sandbox Code Playgroud)

但是我的数据框有数百列,因此我想同时计算所有列的最大长度。问题在于,存在不同的数据类型,我不知道如何一次完成所有操作。

那么问题1:如何获取数据帧中每一列的最大列长

现在,我尝试使用以下代码仅对varchar / object类型的列执行此操作:

xx = df.select_dtypes(include = ['object'])
for col in [xx.columns.values]:
   maxlength = [max(xx.col.apply(len))]
Run Code Online (Sandbox Code Playgroud)

我仅选择对象类型列,并尝试编写for循环。但是它不起作用。在for循环中使用apply()可能不是一个好主意。

问题2:如何仅获取对象类型列的最大长度

样本数据框:

d1 = {'name': ['john', 'tom', 'bob', 'rock', 'jimy'], 'DoB': ['01/02/2010', '01/02/2012', '11/22/2014', '11/22/2014', '09/25/2016'], 'Address': ['NY', 'NJ', 'PA', 'NY', 'CA'], 'comment1': ['Very good performance', 'N/A', 'Need to work hard', 'No Comment', 'Not satisfactory'], 'comment2': ['good', 'Meets Expectation', 'N', 'N/A', 'Incompetence']}
df1 = pd.DataFrame(data = d1)
df1['month'] = pd.DatetimeIndex(df1['DoB']).month
df1['year'] = pd.DatetimeIndex(df1['DoB']).year
Run Code Online (Sandbox Code Playgroud)

python series dataframe python-3.x pandas

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

在将数据框写入 Excel 工作表时,获取 AttributeError 'Workbook' 对象没有属性 'add_worksheet'

我有以下代码,我正在尝试将数据框写入 Excel 文件的“现有”工作表(此处称为 test.xlsx)。Sheet3 是我要放置数据的目标工作表,我不想用新工作表替换整个工作表。

df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})
book = load_workbook('test.xlsx')
writer = pd.ExcelWriter('test.xlsx')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) # *I am not sure what is happening in this line*
df.to_excel(writer,"Sheet3",startcol=0, startrow=20)
Run Code Online (Sandbox Code Playgroud)

当我逐行运行代码时,最后一行出现此错误:

AttributeError: 'Workbook' 对象没有属性 'add_worksheet'。现在为什么当我不尝试添加工作表时会看到此错误?

注意:我知道这个类似的问题Python How to use ExcelWriter to write into an existing worksheet但它对我不起作用,我也无法评论该帖子。

excel pandas openpyxl

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

当存在多个变量时,使用 lambda 在 python 数据框中实现 if-else

我正在尝试在处理数据框时在 python 中实现 if-elif 或 if-else 逻辑。当我处理多个专栏时,我感到很困难。

样本数据框

df=pd.DataFrame({"one":[1,2,3,4,5],"two":[6,7,8,9,10], "name": 'a', 'b', 'a', 'b', 'c'})
Run Code Online (Sandbox Code Playgroud)

如果我的 if-else 逻辑仅基于一列 - 我知道该怎么做。

df['one'] = df["one"].apply(lambda x: x*10 if x<2 else (x**2 if x<4 else x+10))
Run Code Online (Sandbox Code Playgroud)

但我想根据“二”列的值修改“一”列 - 我觉得它会是这样的 -

lambda x, y: x*100 if y>8 else (x*1 if y<8 else x**2)
Run Code Online (Sandbox Code Playgroud)

但我不确定如何指定第二列。我尝试过这种方式,但显然这是不正确的

df['one'] = df["one"]["two"].apply(lambda x, y: x*100 if y>8 else (x*1 if y<8 else x**2))
Run Code Online (Sandbox Code Playgroud)

问题 1 - 上述代码的正确语法是什么?

问题 2 - 如何使用 lambda 实现以下逻辑?

if df['name'].isin(['a','b'])  df['one'] = 100 else …
Run Code Online (Sandbox Code Playgroud)

python lambda if-statement python-3.x pandas

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

如何从一组日期列中获取最大日期值

这是样本数据:

import pandas as pd
d = {'name': ['john', 'tom', 'phill', 'nero', 'bob', 'rob'], 'date1' :['2015-10-05', '2015-01-05', '2015-07-06', '2015-10-06', '2015-10-06', '2015-12-08'], 'date2' :['2015-10-05', '2015-01-05', '2015-07-06', '2015-08-06', '2015-09-06', '2015-12-08'], 'date3' :['2015-07-05', '2015-11-05', '2015-07-06', '2015-11-06', '2015-05-06', '2015-05-08']}
df2 = pd.DataFrame(data = d)
df2['date1'] = pd.DatetimeIndex(df2['date1'])
df2['date2'] = pd.DatetimeIndex(df2['date2'])
df2['date3'] = pd.DatetimeIndex(df2['date3'])
Run Code Online (Sandbox Code Playgroud)

这是表格

在此输入图像描述

问题1:我想创建一个新列max_date,它将具有每行的最大日期值.我以为我可以创建这些列的列表,然后对它们应用max但是它不起作用.我找到了numpy.amax(),但无法使其正常工作.

问题2:我必须使用列名来指定那些列,不能使用像df2 [,0:2]这样的列的位置索引

更新的问题2 -当我说"使用的列名" -我的意思是我有列名,这是我需要使用像[DATE1,DATE2,DATE3]列表.对不起,如果我的帖子不清楚.

python datetime numpy python-3.x pandas

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

如何使用Python找出两个数据框在列名方面的差异

我想找出两个数据框在列名方面的区别。

这是示例表1

d1 = {'row_num': [1, 2, 3, 4, 5], 'name': ['john', 'tom', 'bob', 'rock', 'jimy'], 'DoB': ['01/02/2010', '01/02/2012', '11/22/2014', '11/22/2014', '09/25/2016'], 'Address': ['NY', 'NJ', 'PA', 'NY', 'CA']}
df1 = pd.DataFrame(data = d)
df1['month'] = pd.DatetimeIndex(df['DoB']).month
df1['year'] = pd.DatetimeIndex(df['DoB']).year
Run Code Online (Sandbox Code Playgroud)

这是示例表2

d2 = {'row_num': [1, 2, 3, 4, 5], 'name': ['john', 'tom', 'bob', 'rock', 'jimy'], 'DoB': ['01/02/2010', '01/02/2012', '11/22/2014', '11/22/2014', '09/25/2016'], 'Address': ['NY', 'NJ', 'PA', 'NY', 'CA']}
df2 = pd.DataFrame(data = d)
Run Code Online (Sandbox Code Playgroud)

表 2 或 df2 没有像 df1 那样的月份和年份列。我想找出 df2 中缺少 …

python python-3.x pandas

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

错误“builtin_function_or_method”对象不可下标 - 在 for 循环内附加列表时

我想在 for 循环中从现有列表创建一个新列表,然后通过 if else 语句传递该列表,一次一个元素。我不具备以这种方式使用列表的适当知识。因此这篇文章

样本数据:

f = {'Sales_Person': ['John', 'Tom', 'Dick', 'Harry', 'Rob', 'Mike', 'Miz', 'Sally', 'Buck', 'Roger'],  'location': ['NY', 'NY', 'NY', 'NJ', 'PA', 'NJ', 'NJ', 'PA', 'NY', 'NJ'], 'product_code': ['10NYXX', '11NYXX', '10NYXX', '10NJXY', '11PAXY', '11MNYY', '12NJYX', '11PAYY', '12NYXX', '11CAPQ']}
df1 = pd.DataFrame(data = f)
df1['statusNY'] = 'n/a'
df1['statusPA'] = 'n/a'
df1['statusIL'] = 'n/a'
df1['statusOR'] = 'n/a'
df1['statusNJ'] = 'n/a'
Run Code Online (Sandbox Code Playgroud)

数据看起来像——

在此输入图像描述

我正在获取这些列名称 ['statusNY'、'statusPA'、'statusIL'、'statusOR'、'statusNJ'] 并从中提取州名称 [NY、PA、IL、OR 和 NJ]。然后我将检查“product_code”列是否包含这些州名称。如果为 true,则将 1 分配给“statusNY”,如果为 false,则将 0 分配给“statusNY”。对于其余列名“statusPA”、“statusIL”、“statusOR”、“statusNJ”也是如此

输出应如下所示:

在此输入图像描述

我有以下代码:

for col in …
Run Code Online (Sandbox Code Playgroud)

python list pandas

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