我有一个数据框,其中一些单元格包含多个值的列表.我不想在单元格中存储多个值,而是扩展数据框,以便列表中的每个项目都有自己的行(在所有其他列中具有相同的值).所以,如果我有:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{'trial_num': [1, 2, 3, 1, 2, 3],
'subject': [1, 1, 1, 2, 2, 2],
'samples': [list(np.random.randn(3).round(2)) for i in range(6)]
}
)
df
Out[10]:
samples subject trial_num
0 [0.57, -0.83, 1.44] 1 1
1 [-0.01, 1.13, 0.36] 1 2
2 [1.18, -1.46, -0.94] 1 3
3 [-0.08, -4.22, -2.05] 2 1
4 [0.72, 0.79, 0.53] 2 2
5 [0.4, -0.32, -0.13] 2 3
Run Code Online (Sandbox Code Playgroud)
如何转换为长格式,例如:
subject trial_num sample sample_num …Run Code Online (Sandbox Code Playgroud) 我经常对超过1500万行的数据帧执行pandas操作,我很乐意访问特定操作的进度指示器.
是否存在基于文本的pandas split-apply-combine操作的进度指示器?
例如,在以下情况中:
df_users.groupby(['userID', 'requestDate']).apply(feature_rollup)
Run Code Online (Sandbox Code Playgroud)
where feature_rollup是一个涉及多少DF列的函数,并通过各种方法创建新的用户列.对于大型数据帧,这些操作可能需要一段时间,因此我想知道是否可以在iPython笔记本中使用基于文本的输出来更新我的进度.
到目前为止,我已经尝试了Python的规范循环进度指示器,但它们没有以任何有意义的方式与pandas交互.
我希望在pandas库/文档中我忽略了一些让人们知道split-apply-combine进度的东西.一个简单的实现可能会查看apply函数工作的数据帧子集的总数,并将进度报告为这些子集的已完成部分.
这可能是需要添加到库中的吗?
在Python中(我只使用Python 3.6进行了检查,但我相信它应该适用于许多以前的版本):
(0, 0) == 0, 0 # results in a two element tuple: (False, 0)
0, 0 == (0, 0) # results in a two element tuple: (0, False)
(0, 0) == (0, 0) # results in a boolean True
Run Code Online (Sandbox Code Playgroud)
但:
a = 0, 0
b = (0, 0)
a == b # results in a boolean True
Run Code Online (Sandbox Code Playgroud)
为什么两种方法的结果不同?相等运算符是否以不同方式处理元组?
我正在尝试替换数据帧的一列中的值.列("女性")仅包含"女性"和"男性"的值.
我尝试过以下方法:
w['female']['female']='1'
w['female']['male']='0'
Run Code Online (Sandbox Code Playgroud)
但是收到以前结果的完全相同的副本.
理想情况下,我希望获得一些类似于以下循环元素的输出.
if w['female'] =='female':
w['female'] = '1';
else:
w['female'] = '0';
Run Code Online (Sandbox Code Playgroud)
我查看了陷阱文档(http://pandas.pydata.org/pandas-docs/stable/gotchas.html),但无法弄清楚为什么没有发生.
任何帮助将不胜感激.
我试图在Pandas数据帧中填充任何值,仅为列的某个子集填充0.
当我做:
import pandas as pd
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
print df
df.fillna(value=0, inplace=True)
print df
Run Code Online (Sandbox Code Playgroud)
输出:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 NaN 7.0
3 NaN 6.0 8.0
a b c
0 1.0 4.0 0.0
1 2.0 5.0 0.0
2 3.0 0.0 7.0
3 0.0 6.0 8.0
Run Code Online (Sandbox Code Playgroud)
它取代了每一个None用0的.我想要做的是,只有更换NoneS IN列a和b,但不会c.
这样做的最佳方式是什么?
我有这样的数据帧:
A B C
0 1 0.749065 This
1 2 0.301084 is
2 3 0.463468 a
3 4 0.643961 random
4 1 0.866521 string
5 2 0.120737 !
Run Code Online (Sandbox Code Playgroud)
调用
In [10]: print df.groupby("A")["B"].sum()
Run Code Online (Sandbox Code Playgroud)
将返回
A
1 1.615586
2 0.421821
3 0.463468
4 0.643961
Run Code Online (Sandbox Code Playgroud)
现在我想为"C"列做"相同".因为该列包含字符串,sum()不起作用(尽管您可能认为它会连接字符串).我真正想看到的是每个组的一个列表或一组字符串,即
A
1 {This, string}
2 {is, !}
3 {a}
4 {random}
Run Code Online (Sandbox Code Playgroud)
我一直在努力想办法做到这一点.
Series.unique()(http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html)不起作用,尽管
df.groupby("A")["B"]
Run Code Online (Sandbox Code Playgroud)
是一个
pandas.core.groupby.SeriesGroupBy object
Run Code Online (Sandbox Code Playgroud)
所以我希望任何系列方法都能奏效.有任何想法吗?
以下是纯函数吗?
function test(min,max) {
return Math.random() * (max - min) + min;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是纯函数遵循以下条件:
如果这个定义是正确的,我的函数是纯函数吗?或者我对定义纯函数的不正确理解是什么?
我有一种情况,有时当我读取一个csv来自df我得到一个不需要的索引列名称unnamed:0.这很烦人!我试过了
,A,B,C
0,1,2,3
1,4,5,6
2,7,8,9
Run Code Online (Sandbox Code Playgroud)
我认为这是一个解决方案,但我仍然得到file.csv专栏!有没有人对此有所了解?
例如......
for x in range(0,9):
string'x' = "Hello"
Run Code Online (Sandbox Code Playgroud)
所以我最终得到了string1,string2,string3 ......等于"你好"
要读取一些文本文件,在C或Pascal中,我总是使用以下代码段来读取数据,直到EOF:
while not eof do begin
readline(a);
do_something;
end;
Run Code Online (Sandbox Code Playgroud)
因此,我想知道如何在Python中简单快速地完成这项工作?