我正在探索熊猫 - 试图学习和应用它.目前我有一个csv文件,其中填充了以下结构的金融时间序列数据:
date, time, open, high, low, close, volume
2003.04.08,12:00,1.06830,1.06960,1.06670,1.06690,446
2003.04.08,13:00,1.06700,1.06810,1.06570,1.06630,433
2003.04.08,14:00,1.06650,1.06810,1.06510,1.06670,473
2003.04.08,15:00,1.06670,1.06890,1.06630,1.06850,556
2003.04.08,16:00,1.06840,1.07050,1.06610,1.06680,615
现在我想将csv数据转换为pandas DataFrame对象,以便日期和时间字段合并并成为DataFrame的DateTimeIndex,如下所示:
df = pa.read_csv(path,
names = ['date', 'time', 'open', 'high', 'low', 'close', 'vol'],
parse_dates = {'dateTime': ['date', 'time']},
index_col = 'dateTime')
Run Code Online (Sandbox Code Playgroud)
这可以产生一个很好的DataFrame对象:
<class 'pandas.core.frame.DataFrame'>
Index: 8676 entries, 2003.04.08 12:00 to nan nan
Data columns (total 5 columns):
open 8675 non-null values
high 8675 non-null values
low 8675 non-null values
close 8675 non-null values
vol 8675 non-null values
dtypes: float64(5)
Run Code Online (Sandbox Code Playgroud)
但经过检查,结果证明Index不是DataTimeIndex而是unicode字符串:
type(df.index)
>>> pandas.core.index.Index
df.index …Run Code Online (Sandbox Code Playgroud) 我有一系列特定的数据集,它们采用以下一般形式:
import pandas as pd
import random
df = pd.DataFrame({'n': random.sample(xrange(1000), 3), 't0':['a', 'b', 'c'], 't1':['d','e','f'], 't2':['g','h','i'], 't3':['i','j', 'k']})
Run Code Online (Sandbox Code Playgroud)
tn列的数量(t0, t1, t2 ... tn)因数据集而异,但始终小于 30。我的目标是合并每一行的tn列的内容,以便获得此结果(请注意,为了便于阅读,我需要保留元素之间的空格):
df['result'] = df.t0 +' '+df.t1+' '+df.t2+' '+ df.t3
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。这段代码可能很简单,但是一旦我收到另一个数据集,它就会变得笨拙和不灵活,其中tn列的数量增加了。这就是我的问题所在:
是否有其他语法可以跨多列合并内容?与数字列无关的东西,类似于:
df['result'] = ' '.join(df.ix[:,1:])
Run Code Online (Sandbox Code Playgroud)
基本上我想实现与下面链接中的 OP 相同的效果,但字符串之间有空格: R - 跨数据框的特定列按行连接
python string-concatenation multiple-columns dataframe pandas
我有两个简单的组件,应该使用REQ / REP ZeroMQ模式相互通信。服务器(REP套接字)是使用pyzmq在Python中实现的:
import zmq
def launch_server():
print "Launching server"
with zmq.Context.instance() as ctx:
socket = ctx.socket(zmq.REP)
socket.bind('tcp://127.0.0.1:5555')
while True:
msg = socket.recv()
print "EOM\n\n"
Run Code Online (Sandbox Code Playgroud)
使用NetMQ库以C#编写的客户端(REQ套接字):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NetMQ;
namespace PyNetMQTest
{
class Program
{
static void Main(string[] args)
{
string msg;
NetMQ.Sockets.RequestSocket socket = new NetMQ.Sockets.RequestSocket();
socket.Connect("tcp://127.0.0.1:5555");
for(int i=0; i<5; i++)
socket.SendFrame("test_"+i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过与使用Python实现的REQ套接字进行通讯,Python Server实现已经过测试,可以正常工作。但是C#REQ套接字在循环的第一次迭代中引发以下错误,并且任何消息都不会到达服务器:
NetMQ.dll中发生了'NetMQ.FiniteStateMachineException'类型的未处理异常。其他信息:Req.XSend-无法发送另一个请求
堆栈跟踪:
at NetMQ.Core.Patterns.Req.XSend(Msg& msg)
at NetMQ.Core.SocketBase.TrySend(Msg& msg, TimeSpan timeout, Boolean more) …Run Code Online (Sandbox Code Playgroud)