给出两个数据框:
df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)))
df2 = data.frame(CustomerId = c(2, 4, 6), State = c(rep("Alabama", 2), rep("Ohio", 1)))
df1
# CustomerId Product
# 1 Toaster
# 2 Toaster
# 3 Toaster
# 4 Radio
# 5 Radio
# 6 Radio
df2
# CustomerId State
# 2 Alabama
# 4 Alabama
# 6 Ohio
Run Code Online (Sandbox Code Playgroud)
我怎样才能做数据库风格,即sql风格,加入?也就是说,我该怎么做:
我有一个这样的词典列表:
[{'points': 50, 'time': '5:00', 'year': 2010},
{'points': 25, 'time': '6:00', 'month': "february"},
{'points':90, 'time': '9:00', 'month': 'january'},
{'points_h1':20, 'month': 'june'}]
Run Code Online (Sandbox Code Playgroud)
我想把它变成DataFrame像这样的熊猫:
month points points_h1 time year
0 NaN 50 NaN 5:00 2010
1 february 25 NaN 6:00 NaN
2 january 90 NaN 9:00 NaN
3 june NaN 20 NaN NaN
Run Code Online (Sandbox Code Playgroud)
注意:列的顺序无关紧要.
如何将字典列表转换为pandas DataFrame,如上所示?
我见过很多关于数据透视表的问题.即使他们不知道他们询问数据透视表,他们通常也是.几乎不可能写出一个规范的问题和答案,其中包含了旋转的所有方面....
......但是我要试一试.
现有问题和答案的问题在于,问题通常集中在OP难以概括以便使用一些现有的良好答案的细微差别.但是,没有一个答案试图给出全面的解释(因为这是一项艰巨的任务)
从我的谷歌搜索中查看一些示例
pd.DataFrame.pivot因此,每当有人搜索时,pivot他们会得到零星的结果,而这些结果可能无法回答他们的具体问题.
您可能会注意到,我明显地将我的列和相关列值命名为与我将如何在下面的答案中进行调整相对应.请注意,以便熟悉哪些列名称可以从哪里获得您正在寻找的结果.
import numpy as np
import pandas as pd
from numpy.core.defchararray import add
np.random.seed([3,1415])
n = 20
cols = np.array(['key', 'row', 'item', 'col'])
arr1 = (np.random.randint(5, size=(n, 4)) // [2, 1, 2, 1]).astype(str)
df = pd.DataFrame(
add(cols, arr1), columns=cols
).join(
pd.DataFrame(np.random.rand(n, 2).round(2)).add_prefix('val')
)
print(df)
key row item col val0 val1
0 key0 row3 item1 col3 0.81 0.04
1 key1 …Run Code Online (Sandbox Code Playgroud) 这是我生成数据帧的代码:
import pandas as pd
import numpy as np
dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB'))
Run Code Online (Sandbox Code Playgroud)
然后我得到了数据帧:
+------------+---------+--------+
| | A | B |
+------------+---------+---------
| 0 | 0.626386| 1.52325|
+------------+---------+--------+
Run Code Online (Sandbox Code Playgroud)
当我输入命令时:
dff.mean(axis=1)
Run Code Online (Sandbox Code Playgroud)
我有 :
0 1.074821
dtype: float64
Run Code Online (Sandbox Code Playgroud)
根据pandas的引用,axis = 1代表列,我期望命令的结果
A 0.626386
B 1.523255
dtype: float64
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题:熊猫中的轴是什么意思?
我有一个我要合并的许多data.frames的列表.这里的问题是每个data.frame在行数和列数方面都不同,但它们都共享关键变量(我已经调用过"var1","var2"在下面的代码中).如果data.frames在列方面是相同的,我只能rbind,plyr的rbind.fill可以完成这项工作,但这些数据并非如此.
因为该merge命令仅适用于2个data.frames,所以我转向Internet寻求创意.我从这里得到了这个,它在R 2.7.2中完美运行,这是我当时所拥有的:
merge.rec <- function(.list, ...){
if(length(.list)==1) return(.list[[1]])
Recall(c(list(merge(.list[[1]], .list[[2]], ...)), .list[-(1:2)]), ...)
}
Run Code Online (Sandbox Code Playgroud)
我会像这样调用函数:
df <- merge.rec(my.list, by.x = c("var1", "var2"),
by.y = c("var1", "var2"), all = T, suffixes=c("", ""))
Run Code Online (Sandbox Code Playgroud)
但是在2.7.2之后的任何R版本中,包括2.11和2.12,此代码失败并出现以下错误:
Error in match.names(clabs, names(xi)) :
names do not match previous names
Run Code Online (Sandbox Code Playgroud)
(很明显,我在其他地方看到了其他对此错误的引用而没有解决方案).
有什么方法可以解决这个问题吗?
我有3个CSV文件.每个都有第一列作为人的(字符串)名称,而每个数据框中的所有其他列都是该人的属性.
如何将所有三个CSV文档"连接"在一起以创建单个CSV,每行具有该人员字符串名称的每个唯一值的所有属性?
join()pandas中的函数指定我需要一个多索引,但我对层次索引方案与基于单个索引进行连接有什么关系感到困惑.
嗨,我有以下数据帧:
> df1
id begin conditional confidence discoveryTechnique
0 278 56 false 0.0 1
1 421 18 false 0.0 1
> df2
concept
0 A
1 B
Run Code Online (Sandbox Code Playgroud)
如何合并索引以获得:
id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B
Run Code Online (Sandbox Code Playgroud)
我问,因为我的理解是merge()ie df1.merge(df2)使用列来进行匹配.事实上,这样做我得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
copy=copy, indicator=indicator) …Run Code Online (Sandbox Code Playgroud) pd.concat?levels?keys?熊猫的concat功能是合并公用事业的瑞士军刀.它有用的各种情况很多.现有文档遗漏了一些可选参数的一些细节.其中包括levels和keys论点.我开始弄清楚这些论点的作用.
我将提出一个问题,它将成为许多方面的门户pd.concat.
考虑数据帧d1,d2以及d3:
import pandas as pd
d1 = pd.DataFrame(dict(A=.1, B=.2, C=.3), [2, 3])
d2 = pd.DataFrame(dict(B=.4, C=.5, D=.6), [1, 2])
d3 = pd.DataFrame(dict(A=.7, B=.8, D=.9), [1, 3])
Run Code Online (Sandbox Code Playgroud)
如果我将这些连接在一起
pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'])
Run Code Online (Sandbox Code Playgroud)
我得到了一个pandas.MultiIndexfor my columns对象的预期结果:
A B C D
d1 2 0.1 0.2 0.3 NaN
3 0.1 …Run Code Online (Sandbox Code Playgroud) 我正在使用python pandas数据帧,我有一个初始数据帧说D.我从中提取两个数据帧,如下所示:
D
A
然后我改变A和B中的标签:
A = D[D.label == k]
B = D[D.label != k]
Run Code Online (Sandbox Code Playgroud)
B
我想结合A和B,所以我可以将它们作为一个像union这样的数据框.数据的顺序并不重要,但是当我们从D中对A和B进行采样时,它们会保留D的索引.
我有2个数据帧:
restaurant_ids_dataframe
Data columns (total 13 columns):
business_id 4503 non-null values
categories 4503 non-null values
city 4503 non-null values
full_address 4503 non-null values
latitude 4503 non-null values
longitude 4503 non-null values
name 4503 non-null values
neighborhoods 4503 non-null values
open 4503 non-null values
review_count 4503 non-null values
stars 4503 non-null values
state 4503 non-null values
type 4503 non-null values
dtypes: bool(1), float64(3), int64(1), object(8)`
Run Code Online (Sandbox Code Playgroud)
和
restaurant_review_frame
Int64Index: 158430 entries, 0 to 229905
Data columns (total 8 columns):
business_id 158430 non-null …Run Code Online (Sandbox Code Playgroud)