python - Pandas:如何更改输出 .csv 数据的格式以使用逗号分隔符?
问题描述
背景
使用pandas
,以下程序已成功用于将毫秒分辨率的刻度数据重新采样为 1 秒间隔的 OHLC(开高低收)数据。刻度数据从 .csv 文件中读取,程序将 1 秒 OHLC 数据写入带有新列标题的新 .csv 文件。问题源于输出数据的格式化方式(制表符分隔而不是逗号分隔,并且带有不需要的列标题)。这使得使用plotly
. 我一直在使用 Sublime Text 3 打开 .csv 文件。
目标:
1) 确保输出 OHLC (Open High Low Close) 数据以逗号分隔,以及 2) 仅输出时间,而不输出今天的日期。所需的格式可以在下面的“.csv 的所需输出格式”下方进一步看到。
当前尝试:
import pandas as pd
import sys
# Read data from file
data_frame = pd.read_csv('input_data.csv',
names=['Date_time', 'Bid', 'Bid_qty', 'Ask', 'Ask_qty'],
index_col=0, parse_dates=True, delimiter = ',')
data_frame.head()
# Sample data at set intervals
data_bid=data_frame['Bid'].resample('1S').ohlc()
data_ask=data_frame['Ask'].resample('1S').ohlc()
data_bid.head()
data_ask.head()
# Concatenate bid and ask
data_ask_bid = pd.concat(
[data_bid, data_ask], axis=1,
keys=['Bid', 'Ask'])
# Display options
pd.set_option('display.max_rows', None) # Display all rows
pd.set_option('display.max_columns', None) # Display all columns
pd.set_option('display.width', 150) # Fit columns on same line
pd.set_option('display.max_colwidth', None) # Set max width
# Print to file
original_stdout = sys.stdout # Save reference to original standard output
with open('output_data.csv', 'w') as f:
sys.stdout = f # Change the standard output
print(data_ask_bid)
sys.stdout = original_stdout # Reset standard output to original value
对于该pandas.read_csv
函数,尝试使用sep=','
控制 read_csv 的分隔符的参数,但没有成功。还尝试在打印到输出文件时pandas.DataFrame.to_csv
也使用该函数和参数,但也没有成功。sep=','
输入.csv数据格式(时间、出价、出价数量、询价、询价数量):
00:00:00.033,10.6674,1000000,10.6724,1000000
00:00:00.060,10.6674,1000000,10.6724,2000000
00:00:01.645,10.6674,1000000,10.6724,1000000
00:00:01.670,10.6674,1000000,10.6724,2000000
00:00:02.198,10.6674,1000000,10.6724,1000000
00:00:03.198,10.6674,1000000,10.672,1000000
00:00:03.202,10.6671,1000000,10.672,1000000
00:00:03.202,10.6672,1000000,10.672,1000000
.csv 的当前输出格式:
Bid Ask
open high low close open high low close
Date_time
2020-10-21 00:00:00 10.6674 10.6674 10.6674 10.6674 10.6724 10.6724 10.6724 10.6724
2020-10-21 00:00:01 10.6674 10.6674 10.6674 10.6674 10.6724 10.6724 10.6724 10.6724
2020-10-21 00:00:02 10.6674 10.6674 10.6674 10.6674 10.6724 10.6724 10.6724 10.6724
2020-10-21 00:00:03 10.6674 10.6674 10.6671 10.6672 10.6720 10.6720 10.6720 10.6720
.csv 的所需输出格式:
time,bid_open,bid_high,bid_low,bid_close,ask_open,ask_high,ask_low,ask_close
00:00:00,10.6674,10.6674,10.6674,10.6674,10.6724,10.6724,10.6724,10.6724
00:00:01,10.6674,10.6674,10.6674,10.6674,10.6724,10.6724,10.6724,10.6724
00:00:02,10.6674,10.6674,10.6674,10.6674,10.6724,10.6724,10.6724,10.6724
00:00:03,10.6674,10.6674,10.6671,10.6672,10.6720,10.6720,10.6720,10.6720
概括:
Q1。打印到输出 .csv 文件的每个值(包括列标题)如何以逗号分隔?
Q2。如何在输出 .csv 文件中显示没有今天日期的时间?
解决方案
您似乎将数据帧的字符串表示形式打印到文件中,这是不正确的。如果你这样做,它应该工作:
import pandas as pd
# Read data from file
data_frame = pd.read_csv('input_data.csv',
names=['Date_time', 'Bid', 'Bid_qty', 'Ask', 'Ask_qty'],
index_col=0, parse_dates=True, delimiter = ',')
# Sample data at set intervals
data_bid=data_frame['Bid'].resample('1S').ohlc()
data_ask=data_frame['Ask'].resample('1S').ohlc()
# Concatenate bid and ask
data_ask_bid = pd.concat(
[data_bid, data_ask], axis=1,
keys=['Bid', 'Ask'])
data_ask_bid.to_csv('file.csv', index=False)
推荐阅读
- powershell - 通过 Portal 或 Powershell 脚本更新最低 TLS 版本后是否需要重新启动 Azure Function App
- python - 如何在世界坐标系中投影二维激光扫描仪数据
- java - 而不是 INSERT 触发器被绕过
- c# - 使两个相互依赖的类相等
- python-3.x - 使用 chromedriver 时出现 Unicodeescape 错误
- pandas - NameError: ("name 'true' is not defined", '发生在索引 0')
- c# - 如何在 C# 控制台应用程序中使用多个 Ctrl+C 输入并用户确认以终止应用程序
- r - RMarkdown 将自动图形编号抑制为 html
- ios - 尝试将数据传递到另一个视图控制器时出现致命错误
- ios - 从 AVPlayer 移除观察者时,应用程序有时会崩溃