我正在尝试使用panda
s read_csv
或read_stata
函数读取一个有点大的数据集,但我一直在使用Memory Error
s.数据帧的最大大小是多少?我的理解是,只要数据适合内存,数据帧就应该没问题,这对我来说应该不是问题.还有什么可能导致内存错误?
对于上下文,我试图阅读2007年消费者财务调查,包括ASCII格式(使用read_csv
)和Stata格式(使用read_stata
).该文件大约为200MB作为dta,大约1.2GB作为ASCII,并且在Stata中打开它告诉我,有2200个观察/行有5,800个变量/列.
对于一个问题的道歉,可能很明显我通常在Python/pandas中工作,但我坚持这一点.如何data.table
使用字符串选择列?
dt$"string"
dt$as.name("string")
dt$get("string")
Run Code Online (Sandbox Code Playgroud)
我确信这很简单,但我没有得到它.任何帮助是极大的赞赏!
在下面的一些有用的评论和提示之后,我想我已经缩小了问题并且有一个可重复的例子.考虑:
dt = data.table(ID = c("a","a","a","b","b","b"), col1=rnorm(6), col2=rnorm(6)*100)
Run Code Online (Sandbox Code Playgroud)
并假设我们要将值分配col2
给col1
.正如我在下面学到的,这个data.table
语法很dt[,col1:=col2]
简洁.当参数中的一个(或两个)变量j
是字符串时,问题就开始了.我找到了以下内容:
dt[, "col1":=col2]
按预期工作
dt[, "col1":="col2"]
按预期失败(尝试将字符分配给col2
双向量col1
dt[, "col1":=get("col2")]
按预期工作
dt[, get("col1")]
col1
按预期返回
但是:dt[, get("col1"):=col2]
或任何其他任务失败.
一些背景:这样做的原因是,我在构建一个循环的字符串,以访问所有命名列的数量较多colname_colnumber
了,也就是我环路colname
和colnumber
对再接入列paste0(colname,colnumber)
.
对这样一个完全无知的问题抱歉,但我不知道任何SAS,只需知道一行代码的作用,所以我希望有人可以提供帮助.我有一个变量数组的循环,以及一个基于比较的if子句.Z
,但这个变量是无处定义的,所以我猜这是某种SAS语法技巧.这是循环:
ARRAY PTYPE{*} X4216 X4316 X4416 X4816 X4916 X5016;
DO I=1 TO DIM(PTYPE);
IF (PTYPE{I}<=.Z) THEN PUT &ID= PTYPE{I}=;
END;
Run Code Online (Sandbox Code Playgroud)
所以在第一次迭代时,循环会检查值X4216
是否小于.Z
,然后......?ID
是数据集中的另一个变量,但我不知道在if子句的右侧发生了什么.我简要地查阅了SAS文档,以确定&符号是指宏,但我对SAS的了解仅限于了解正在发生的事情.
任何人都可以开导我吗?
我在outreg2
使用Stata中使用的用户编写的包时遇到了麻烦.当我使用该tex(frag)
选项构建输出时,结果表在每行的末尾有三个反斜杠而不是仅两个,导致每行的"错位对齐字符"错误.关于我做错了什么或如何解决这个问题的任何想法?
(first regression specification)
outreg2 d.lntau_sh d.lntau_sf using Table_1.tex, nocons replace
(second regression second regression specification)
outreg2 d.lntau_ht d.lntau_th using Table_1.tex, tex(frag) se coefastr symb(***,**,*) rdec(3) bdec(3) r2 nocons append
Run Code Online (Sandbox Code Playgroud) 我对 numpy 和 pandas 日期对象之间的互操作感到困惑(或者通常只是 numpy 的 datetime64)。
我试图使用 numpy 的内置功能来计算工作日,如下所示:
np.busday_count("2016-03-01", "2016-03-31", holidays=[np.datetime64("28/03/2016")])
Run Code Online (Sandbox Code Playgroud)
然而,numpy 显然无法处理反转的日期格式:
ValueError: Error parsing datetime string "28/03/2016" at position 2
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我想我应该使用 pandas to_datetime,它可以。然而:
np.busday_count("2016-03-01", "2016-03-31", holidays=[np.datetime64(pd.to_datetime("28/03/2016"))])
ValueError: Cannot safely convert provided holidays input into an array of dates
Run Code Online (Sandbox Code Playgroud)
搜索了一下,这似乎是由于 to_datetime 和 np.datetime64 的链接产生一个datetime64[us]
对象而引起的,而该对象显然是该busday_count
函数无法接受的(这是预期的行为还是错误?)。因此,我的下一个尝试是:
np.busday_count("2016-03-01", "2016-03-31", holidays=[np.datetime64(pd.Timestamp("28"), "D")])
Run Code Online (Sandbox Code Playgroud)
但:
TypeError: Cannot cast datetime.datetime object from metadata [us] to [D] according to the rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)
这就是我的问题 - 为什么所有这些日期时间格式之间存在如此多的不兼容性?我怎样才能绕过它们?
假设我必须使用一个比另一个长的 DataFrames,我想加入特定的列,如下例所示:
A = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10], 'col3': [11, 12, 13, 14, 15]})
B = pd.DataFrame({'col1': [1, 3, 5], 'col2': [16, 17, 18], 'col4': [19, 20, 21]})
Run Code Online (Sandbox Code Playgroud)
然后我加入他们:
pd.merge(A, B, on='col1', how='outer')
Run Code Online (Sandbox Code Playgroud)
并按预期获得:
col1 col2_x col3 col2_y col4
0 1 6 11 16 19
1 2 7 12 NaN NaN
2 3 8 13 17 20
3 4 9 14 NaN NaN
4 5 10 15 18 21
5 rows × …
Run Code Online (Sandbox Code Playgroud) 关于SO的问题已经有几个问题,尤其是这个问题,但是没有一个答案似乎对我有用,并且很多文档链接(特别是关于lexsorting)都被打破了,所以我会问另一个.
我正在尝试做某事(看似)非常简单.请考虑以下MultiIndexed Dataframe:
import pandas as pd; import random
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.concat([pd.Series(np.random.randn(8), index=index), pd.Series(np.random.randn(8), index=index)], axis=1)
Run Code Online (Sandbox Code Playgroud)
现在我想将列中的所有值设置0
为某个值(比方说np.NaN
),以便在类别中进行观察one
.我失败了:
df.loc(axis=0)[:, "one"][0] = 1 # setting with copy warning
Run Code Online (Sandbox Code Playgroud)
和
df.loc(axis=0)[:, "one", 0] = 1
Run Code Online (Sandbox Code Playgroud)
这或者产生关于键的长度超过索引长度的警告,或者关于缺少lexsorting到足够深度的警告.
这样做的正确方法是什么?
我无法理解pandas和/或numpy如何处理NaN值.我正在提取大熊猫数据帧的子集以计算t-stats,例如我想知道x1值为A的组的x2平均值与x1值为B的组的平均值是否存在显着差异(抱歉没有让这个成为一个有效的例子,但我不知道如何重新创建在我的数据框中弹出的NaN值,使用read_csv读取原始数据,其中csv表示缺少的值NA
):
import numpy as np
import pandas as pd
import scipy.stats as st
A = data[data['x1']=='A']['x2']
B = data[data['x1']=='B'].x2
A
2 3
3 1
5 2
6 3
10 3
12 2
15 2
16 0
21 0
24 1
25 1
28 NaN
31 0
32 3
...
677 0
681 NaN
682 3
683 1
686 2
Name: praxiserf, Length: 335, dtype: float64
Run Code Online (Sandbox Code Playgroud)
也就是说,我有两个pandas.core.series.Series
对象,然后我想对它进行t检验.但是,使用
st.ttest_ind(A, B)
Run Code Online (Sandbox Code Playgroud)
收益:
(array(nan), nan)
Run Code Online (Sandbox Code Playgroud)
我认为这与ttest_ind
接受数组作为输入的事实有关,当将系列转换为数组时,我的NaN值似乎存在问题.如果我尝试计算原始系列的方法,我得到:
A.mean(), B.mean() …
Run Code Online (Sandbox Code Playgroud) 我在一个pandas数据帧上运行了两个不同但非常相似的循环,我想知道是否有某种groupby操作可以让我通过避免循环来加快速度.
for x in df.var1:
df[df.var1==x, 'var2'] = np.max(df[df.var1==x, 'var2'])
Run Code Online (Sandbox Code Playgroud)
也就是说,假设存在多个具有相同值的行var1
,我想将var2
所有这些行的值设置为在所有这些行上var2
获得的最大值.
我觉得我应该能够在没有for循环的情况下做到这一点,但由于某种原因我无法弄清楚如何.想法?
我正在使用 Julia v1.5.2,当我尝试安装 EvalMetrics 时出现以下错误:
\nPkg.add("EvalMetrics")
我什至尝试使用 Pkg 管理器而不是使用 import Pkg,但它似乎也没有什么区别。
\nUnsatisfiable requirements detected for package StatsBase [2913bbd2]:\n StatsBase [2913bbd2] log:\n \xe2\x94\x9c\xe2\x94\x80possible versions are: 0.24.0-0.33.19 or uninstalled\n \xe2\x94\x9c\xe2\x94\x80restricted to versions * by an explicit requirement, leaving only versions 0.24.0-0.33.19\n \xe2\x94\x9c\xe2\x94\x80restricted by compatibility requirements with JuliaDB [a93385a2] to versions: 0.24.0-0.32.2\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80JuliaDB [a93385a2] log:\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80possible versions are: 0.9.0-0.13.1 or uninstalled\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80restricted to versions * by an explicit requirement, leaving only versions 0.9.0-0.13.1\n \xe2\x94\x94\xe2\x94\x80restricted by compatibility requirements …
Run Code Online (Sandbox Code Playgroud) 如何seaborn.despine
避免将我的两个音阶放在我的情节的左侧?到目前为止我提出的最好的是:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
sns.set_style("white")
fig, ax = plt.subplots()
ax.plot(np.random.rand(10))
ax2 =ax.twinx()
ax2.plot(100*np.random.rand(10))
sns.despine(ax=ax, right=True, left=True)
sns.despine(ax=ax2, left=True, right=False)
Run Code Online (Sandbox Code Playgroud)
但是任何其他组合都不会使y轴脱垂或将右轴放在左侧.
输出如上:(所需输出没有刺,只有左右数字)
如何在 Julia 中创建 2D(9 x 9)字符串数组并对其进行初始化
global AStrings = String(9,9)
Run Code Online (Sandbox Code Playgroud)
然后分配一个 float64 , float64 给它
AStrings[i,j] = string(c[i]) * "," * string(c2[i])
Run Code Online (Sandbox Code Playgroud)
注意c[i]
和c2[i]
是两个浮点数