在pandas中,按行或按列对数据帧进行随机播放的简单有效方法是什么?即如何编写一个函数shuffle(df, n, axis=0),它接受一个数据帧,一些shuffle n和一个轴(axis=0是行,axis=1是列),并返回已经洗牌n次数的数据帧的副本.
编辑:关键是在不破坏数据帧的行/列标签的情况下执行此操作.如果你只是洗牌df.index,那就失去了所有的信息.我希望结果df与原始相同,除了行的顺序或列的顺序不同.
编辑2:我的问题不清楚.当我说洗牌行时,我的意思是每行独立洗牌.因此,如果您有两列,a并且b我希望每行都自行进行洗牌,那么如果您只是重新排序每一行,那么您之间a和之间的关联就不b一样了.就像是:
for 1...n:
for each col in df: shuffle column
return new_df
Run Code Online (Sandbox Code Playgroud)
但希望比天真循环更有效.这对我不起作用:
def shuffle(df, n, axis=0):
shuffled_df = df.copy()
for k in range(n):
shuffled_df.apply(np.random.shuffle(shuffled_df.values),axis=axis)
return shuffled_df
df = pandas.DataFrame({'A':range(10), 'B':range(10)})
shuffle(df, 5)
Run Code Online (Sandbox Code Playgroud) 我有一个423244行的大型数据帧.我想将其拆分为4.我尝试了下面的代码,它给出了一个错误?ValueError: array split does not result in an equal division
for item in np.split(df, 4):
print item
Run Code Online (Sandbox Code Playgroud)
如何将此数据帧拆分为4组?
我有一个如下的数据框:
df
date time open high low last
01-01-2017 11:00:00 37 45 36 42
01-01-2017 11:23:00 36 43 33 38
01-01-2017 12:00:00 45 55 35 43
....
Run Code Online (Sandbox Code Playgroud)
我想把它写进cassandra。这是一种在python中处理数据后的批量上传。
cassandra 的架构如下:
CREATE TABLE ks.table1(date text, time text, open float, high float, low
float, last float, PRIMARY KEY(date, time))
Run Code Online (Sandbox Code Playgroud)
要将单行插入到 cassandra 中,我们可以在 python 中使用 cassandra-driver 但我找不到有关上传整个数据帧的任何详细信息。
from cassandra.cluster import Cluster
session.execute(
"""
INSERT INTO ks.table1 (date,time,open,high,low,last)
VALUES (01-01-2017, 11:00:00, 37, 45, 36, 42)
""")
Run Code Online (Sandbox Code Playgroud)
PS:之前已经问过类似的问题,但没有回答我的问题。