我有一个类似下面的字典
defaultdict(list,
{'Open': ['47.47', '47.46', '47.38', ...],
'Close': ['47.48', '47.45', '47.40', ...],
'Date': ['2016/11/22 07:00:00', '2016/11/22 06:59:00','2016/11/22 06:58:00', ...]})
Run Code Online (Sandbox Code Playgroud)
我的目的是将此字典转换为数据帧,并将"日期"键值设置为数据帧的索引.
我可以通过以下命令完成这项工作
df = pd.DataFrame(dictionary, columns=['Date', 'Open', 'Close'])
0 Date Open Close
1 2016/11/22 07:00:00 47.47 47.48
2 2016/11/22 06:59:00 47.46 47.45
3 2016/11/22 06:58:00 47.38 47.38
df.index = df.Date
Date Date Open Close
2016/11/22 07:00:00 2016/11/22 07:00:00 47.47 47.48
2016/11/22 06:59:00 2016/11/22 06:59:00 47.46 47.45
2016/11/22 06:58:00 2016/11/22 06:58:00 47.38 47.38
Run Code Online (Sandbox Code Playgroud)
但是,我有两个'Date'列,其中一列是索引,另一列是原始列.
有没有办法在将字典转换为数据帧时设置索引,而不像下面那样重叠列?
Date Close Open
2016/11/22 07:00:00 …Run Code Online (Sandbox Code Playgroud) 我在 Python 3.6.2(32bit) 和 Windows 10 上使用 PyQtGraph '0.9.8+gd627e39'。
我的目标是使用显示日期时间的 X 轴绘制实时数据。
Time Value
datetime.datetime(2018, 3, 1, 9, 36, 50, 136415) 10
datetime.datetime(2018, 3, 1, 9, 36, 51, 330912) 9
datetime.datetime(2018, 3, 1, 9, 36, 51, 382815) 12
datetime.datetime(2018, 3, 1, 9, 36, 52, 928818) 11
...
Run Code Online (Sandbox Code Playgroud)
查了https://gist.github.com/friendzis/4e98ebe2cf29c0c2c232 , pyqtgraph , plotting time series等相关问题
,但还是很难掌握怎么用DateAxisItem
我尝试使用该模块制作一个简单的代码,
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
from datetime import datetime
from time import time …Run Code Online (Sandbox Code Playgroud) 我选择了特定的 hdf5 数据集,并希望将它们复制到新的 hdf5 文件中。我可以找到一些有关在两个文件之间复制的教程,但是如果您刚刚创建了一个新文件并且想要将数据集复制到该文件怎么办?我以为下面的方法可行,但事实并非如此。有什么简单的方法可以做到这一点吗?
>>> dic_oldDataset['old_dataset']
<HDF5 dataset "old_dataset": shape (333217,), type "|V14">
>>> new_file = h5py.File('new_file.h5', 'a')
>>> new_file.create_group('new_group')
>>> new_file['new_group']['new_dataset'] = dic_oldDataset['old_dataset']
RuntimeError: Unable to create link (interfile hard links are not allowed)
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的数据框:
>>> df
value
time
2020-01-31 07:59:43.232 -6
2020-01-31 07:59:43.232 -2
2020-01-31 07:59:43.232 -1
2020-01-31 07:59:43.264 1
2020-01-31 07:59:43.389 0
2020-01-31 07:59:43.466 1
2020-01-31 07:59:43.466 5
2020-01-31 07:59:43.466 -1
2020-01-31 07:59:43.467 -1
2020-01-31 07:59:43.467 -1
2020-01-31 07:59:43.467 5
2020-01-31 07:59:43.467 1
Run Code Online (Sandbox Code Playgroud)
我想再添加 3 列,以某个数字显示正负值的比率。例如,如果数字是 8:
value neg pos total
time
2020-01-31 07:59:43.232 -6
2020-01-31 07:59:43.232 -2 8 0 8
2020-01-31 07:59:43.232 -1
2020-01-31 07:59:43.264 1
2020-01-31 07:59:43.389 0
2020-01-31 07:59:43.466 1
2020-01-31 07:59:43.466 5 1 7 8
2020-01-31 …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个程序来查找满足某些条件的连续行。例如,如果有一个如下所示的数据框:
df = pd.DataFrame([1,1,2,-13,-4,-5,6,17,8,9,-10,-11,-12,-13,14,15],
index=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
columns=['value'])
>>> df
value
0 1
1 1
2 2
3 -13
4 -4
5 -5
6 6
7 17
8 8
9 9
10 -10
11 -11
12 -12
13 -13
14 -14
15 15
Run Code Online (Sandbox Code Playgroud)
我希望它返回一个数据框,显示满足以下条件的行:
1) 顺序必须是(positive rows)and (negative rows),而不是相反。
2) 每组正或负的行必须至少有 3 行
3)正负组必须彼此相邻
posIdx, negIdx, posLength, negLength
0 2 3 3 3 # (1,1,2) (-13,-4,-5)
1 9 10 4 5 # (6,17,8,9) (-10,-11,-12,-13,-14)
Run Code Online (Sandbox Code Playgroud)
有什么简单的方法可以使用 python 或 pandas 命令来做到这一点吗?
我使用Python 3.6.1并且由于其方便性,我经常使用集合中的deque().这一次,我需要得到一个双端队列的第一个值,并想知道它是否可能.
问题是我可以使用.popleft(),但它最终会同时删除该值.我想到了list(deque01)[0],但是当deque01很大或者获得第一个值的过程重复多次时,我担心它是否会耗费大量资源.是否有任何方法或技巧可以有效地做到这一点?
我想知道如何将嵌套的defaultdict默认为列表[0,0,0].例如,我想制作这种分层默认用法.
dic01 = {'year2017': {'jul_to_sep_temperature':[25, 20, 17],
'oct_to_dec_temperature':[10, 8, 7]},
'year2018': {'jan_to_mar_temperature':[ 8, 9, 10].
'apr_to_jun_temperature':[ 0, 0, 0]}
}
Run Code Online (Sandbox Code Playgroud)
为了做这个嵌套的dictioanry,我做了dic01 = defaultdict(dict)并添加了一个字典作为dic01['year2018']['jan_temperature'] = [8, 9, 10].我的问题是,是否可以在不事先绑定[0,0,0]的情况下更新列表的每个元素.在其他工作中,如果我将defaultdict作为defaultdict(dict),我必须在使用之前绑定列表[0,0,0],并且我想跳过这个绑定过程.
# The way I do this
dic01['year2018']['jul_to_sep_temperature'] = [0,0,0] # -> how to omit this procedure?
dic01['year2018']['jul_to_sep_temperature'][0] = 25
# The way I want to do this
dic01['year2018']['jul_to_sep_temperature'][0] = 25 # by the end of July
Run Code Online (Sandbox Code Playgroud) 我试图用来MessagePack保存多个结构列表,因为我读到它的性能比BinaryFormatter序列化更好。
我想要做的是接收实时时间序列数据并定期将其保存(附加)到磁盘上,例如,如果列表的元素数为 100。我的问题是:
1)在这种情况下,序列化结构列表并将其异步保存到磁盘是否更好?
2) 如何使用 MessagePack 简单地将其保存到磁盘?
public struct struct_realTime
{
public int indexNum { get; set; }
public string currentTime { get; set; }
public string currentType { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<struct_realTime> list_temp = new List<struct_realTime>(100000);
for (int num=0; num < 100000; num++)
{
list_temp.Add(new struct_realTime
{
indexNum = 1,
currentTime = "time",
currentType = "type",
});
}
string filename = "file.bin";
using (var fileStream …Run Code Online (Sandbox Code Playgroud) 我正在制作一个程序,可以实时从互联网连续接收数据(字符串类型)。为了更好的性能,它将新数据存储在列表(内存)中,并且每天只将其写入文件一次。
我想知道列表的大小是否越大,向其添加新值所需的时间就越长。例如,在性能方面,向大小为 10 的列表添加新数据与向大于 3000000 的列表执行相同操作之间有什么区别吗?我想知道如果我从一开始就设置列表的默认大小,例如new List<string>(3000000).
如果我能得到一些关于更好地完成这项工作的建议,我将不胜感激。
我已经用字典制作了一个数据框来对其进行操作。
dic_people = defaultdict(dict)
dic_people['A']['language'] = 'English'
dic_people['A']['nationality'] = 'Russia'
dic_people['A']['joined'] = 201010
dic_people['B']['language'] = 'French'
dic_people['B']['nationality'] = 'Canada'
dic_people['B']['joined'] = 201009
dic_people['C']['language'] = 'English'
dic_people['C']['nationality'] = 'Canada'
dic_people['C']['joined'] = 201008
dic_people['D']['language'] = 'French'
dic_people['D']['nationality'] = 'France'
dic_people['D']['joined'] = 201007
dic_people['E']['language'] = 'English'
dic_people['E']['nationality'] = 'Ireland'
dic_people['E']['joined'] = 201011
df = pd.DataFrame.from_dict(dic_people)
>>> df
A B C D E
joined 201010 201009 201008 201007 201011
language English French English French English
nationality Russia Canada Canada France Ireland
Run Code Online (Sandbox Code Playgroud)
我想选择2个人,他们1)最早加入,2)说英语。因此,结果将是
A C …Run Code Online (Sandbox Code Playgroud)