我有一个具有列结构的pandas数据框(df):
month a b c d
Run Code Online (Sandbox Code Playgroud)
此数据框具有例如1月,2月,3月,4月的数据。A,B,C,D是数字列。对于2月,我想重新计算A列并在数据框中更新它,例如,对于month = Feb,A = B + C + D
我使用的代码:
df[df['month']=='Feb']['A']=df[df['month']=='Feb']['B'] + df[df['month']=='Feb']['C'] + df[df['month']=='Feb']['D']
Run Code Online (Sandbox Code Playgroud)
该命令没有错误,但是没有更改2月份的A列中的值。在控制台中,它给出了以下消息:
试图在DataFrame的切片副本上设置一个值。
尝试改用.loc [row_indexer,col_indexer] = value
我尝试使用.loc,但是现在我正在使用的数据框已经使用过.reset_index(),因此我不确定如何设置索引和使用.loc。我遵循文档,但不清楚。你能帮我吗?这是一个示例数据框:
import pandas as pd import numpy as np
dates = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
Run Code Online (Sandbox Code Playgroud)
我想更新说一个日期:2000-01-03。我无法提供数据片段,因为它是实时数据。
我正在使用 python 将数据(约 800 万行)从 oracle 传输到 vertica。我写了一个 python 脚本,它在 2 小时内传输数据,但我正在寻找提高传输速度的方法。
我正在使用的过程:
dataframe.to_sql方法,但该方法仅限于几个数据库有没有人使用更好的方法(批量插入或任何其他方法?)使用 python 将数据插入 vertica?
这是代码片段:
df = pandas.read_sql_query(sql,conn)
conn_vertica = pyodbc.connect("DSN=dsnname")
cursor = conn_vertica.cursor()
for i,row in df.iterrows():
cursor.execute("insert into <tablename> values(?,?,?,?,?,?,?,?,?)",row.values[0],row.values[1],row.values[2],row.values[3],row.values[4],row.values[5],row.values[6],row.values[7],row.values[8])
cursor.close()
conn_vertica.commit()
conn_vertica.close()
Run Code Online (Sandbox Code Playgroud) 我正在尝试将列表传递给 sql。根据我的发现,bind列表没有类型。因此,我尝试将列表转换为字符串:这是我尝试执行的 sql:
select a,b,sum(c) as total from t where d in ('x','y') group by 1,2
Run Code Online (Sandbox Code Playgroud)
由于我必须对其进行参数化,因此我使用了以下内容:
import pandas as pd
import pyodbc
#conn_vertica -- connection object to vertica
f_list = ['x','y']
sql_test= select a,b,sum(c) as total from t where d in (%s) group by 1,2
l = ', '.join(map(lambda x: '%s',f_list))
sql_test = sql_test % l
df_test = pd.read_sql(sql_test,conn_vertica) # to read it into a dataframe
Run Code Online (Sandbox Code Playgroud)
在运行这个我得到一个错误:
pandas.io.sql.DatabaseError: Execution failed on sql 'select a, b, sum(c) as …Run Code Online (Sandbox Code Playgroud) 我在数据框中有一个具有浮点值的列(所以我将此列称为Float系列).我想将所有值转换为整数或只是将其四舍五入,以便没有小数.
我们说数据帧是df,列是a,我试过这个:
df['a'] = round(df['a'])
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,说这个方法不能应用于系列,只适用于单个值.
接下来我尝试了这个:
for obj in df['a']:
obj =int(round(obj))
Run Code Online (Sandbox Code Playgroud)
在此之后我打印了df,但没有变化.我哪里错了?
我需要根据给定的年月值获得一个月的第一天和最后一天.我能够获得第一天,我们如何得到这个月的最后一天(在python中):
from datetime import date
def first_day_of_month(year,month):
return date(year, month, 1)
print "Today: %s" % date.today()
print ("First day of this month: %s" %
first_day_of_month(2015,10))
Run Code Online (Sandbox Code Playgroud)
这给出了输出:今天:2015-10-26本月第一天:2015-10-01
如何获取本月的最后一天?Ps:我不想将31作为date()函数的第三个参数.我想计算一个月中的天数,然后将其传递给函数.
我想从当前日期开始下个季度.
library(lubridate)
current_date = Sys.Date()
quarter(Sys.Date(), with_year= TRUE)
Run Code Online (Sandbox Code Playgroud)
或者从quarters.Date(Sys.Date())我可以得到的季度的功能 .我无法在上面的代码中添加四分之一.
我可以使用其他任何软件包或默认软件包中的任何其他功能来执行此操作吗?