我已经在 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 的处理依赖项
有人遇到过同样的问题吗?
我有几个日期列,我想将它们转换为月/日/年格式。假设 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 时做到这一点?
我在像下面的代码这样的条件语句中使用 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吗?或者有其他方法可以做到吗?
我有一个数据框,其中大多数列都是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) 我有以下代码,我正在尝试将数据框写入 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但它对我不起作用,我也无法评论该帖子。
我正在尝试在处理数据框时在 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) 这是样本数据:
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]列表.对不起,如果我的帖子不清楚.
我想找出两个数据框在列名方面的区别。
这是示例表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 中缺少 …
我想在 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)