Python 将列标题添加到数据帧。。但是楠';s所有数据,即使标题是相同的维度
我正在尝试将列标题添加到csv文件中,我已使用Pandas将其解析为数据帧Python 将列标题添加到数据帧。。但是楠';s所有数据,即使标题是相同的维度,python,csv,pandas,Python,Csv,Pandas,我正在尝试将列标题添加到csv文件中,我已使用Pandas将其解析为数据帧 dfTrades = pd.read_csv('pnl1.txt',delim_whitespace=True,header=None,); dfTrades = dfTrades.drop(dfTrades.columns[[3,4,6,8,10,11,13,15,17,18,25,27,29,32]], axis=1) # Note: zero indexed dfTrades = dfTrades.set_
dfTrades = pd.read_csv('pnl1.txt',delim_whitespace=True,header=None,);
dfTrades = dfTrades.drop(dfTrades.columns[[3,4,6,8,10,11,13,15,17,18,25,27,29,32]], axis=1) # Note: zero indexed
dfTrades = dfTrades.set_index([dfTrades.index]);
df = pd.DataFrame(dfTrades,columns=['TradeDate',
'TradeTime',
'CumPnL',
'DailyCumPnL',
'RealisedPnL',
'UnRealisedPnL',
'CCYCCY',
'CCYCCYPnLDaily',
'Position',
'CandleOpen',
'CandleHigh',
'CandleLow',
'CandleClose',
'CandleDir',
'CandleDirSwings',
'TradeAmount',
'Rate',
'PnL/Trade',
'Venue',
'OrderType',
'OrderID'
'Code']);
print df
数据结构如下:
01/10/2015 05:47.3 190 190 -648 838 EURNOK -648 0 0 611 -1137 -648 H 2 -1000000 9.465 -648 INTERNAL IOC 287 AS
熊猫返回的是:
TradeDate TradeTime CumPnL DailyCumPnL RealisedPnL UnRealisedPnL \
0 NaN NaN NaN NaN NaN NaN ...
如果您能就此问题提供任何建议,我将不胜感激
谢谢
附言。
感谢埃德的回答。
我已经试过你的建议了
df = dfTrades.columns=['TradeDate',
'TradeTime',
'CumPnL',
'DailyCumPnL',
'RealisedPnL',
'UnRealisedPnL',
'CCYCCY',
'CCYCCYPnLDaily',
'Position',
'CandleOpen',
'CandleHigh',
'CandleLow',
'CandleClose',
'CandleDir',
'CandleDirSwings',
'TradeAmount',
'Rate',
'PnL/Trade',
'Venue',
'OrderType',
'OrderID'
'Code'];
但现在问题已经演变为:
ValueError: Length mismatch: Expected axis has 22 elements, new values have 21 elements
我采用了矩阵的形状,得到:
dfTrades.shape
(12056, 22)
很遗憾,我仍然需要一些帮助:(直接分配给列:
df.columns = ['TradeDate',
'TradeTime',
'CumPnL',
'DailyCumPnL',
'RealisedPnL',
'UnRealisedPnL',
'CCYCCY',
'CCYCCYPnLDaily',
'Position',
'CandleOpen',
'CandleHigh',
'CandleLow',
'CandleClose',
'CandleDir',
'CandleDirSwings',
'TradeAmount',
'Rate',
'PnL/Trade',
'Venue',
'OrderType',
'OrderID'
'Code']
您要做的是重新编制索引,因为列不一致,所以在传递df时获取所有NaN
s,因为df将与现有列名和索引值对齐
您可以在此处看到相同的语义行为:
In [240]:
df = pd.DataFrame(data= np.random.randn(5,3), columns = np.arange(3))
df
Out[240]:
0 1 2
0 1.037216 0.761995 0.153047
1 -0.602141 -0.114032 -0.323872
2 -1.188986 0.594895 -0.733236
3 0.556196 0.363965 -0.893846
4 0.547791 -0.378287 -1.171706
In [242]:
df1 = pd.DataFrame(df, columns = list('abc'))
df1
Out[242]:
a b c
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
或者,您可以将np数组作为数据传递:
df = pd.DataFrame(dfTrades.values,columns=['TradeDate',
In [244]:
df1 = pd.DataFrame(df.values, columns = list('abc'))
df1
Out[244]:
a b c
0 1.037216 0.761995 0.153047
1 -0.602141 -0.114032 -0.323872
2 -1.188986 0.594895 -0.733236
3 0.556196 0.363965 -0.893846
4 0.547791 -0.378287 -1.171706
您可以这样尝试:
您可以在read\u csv
名称:类似数组,默认无要使用的列名列表。如果
不包含标题行,则应显式传递header=None
回答。当传递到pandas
pd.DataFrame
时,您需要执行dfTrades.values
而不是dfTrades
column_names= ['TradeDate',
'TradeTime',
'CumPnL',
'DailyCumPnL',
'RealisedPnL',
'UnRealisedPnL',
'CCYCCY',
'CCYCCYPnLDaily',
'Position',
'CandleOpen',
'CandleHigh',
'CandleLow',
'CandleClose',
'CandleDir',
'CandleDirSwings',
'TradeAmount',
'Rate',
'PnL/Trade',
'Venue',
'OrderType',
'OrderID'
'Code']
df1 = pd.DataFrame(dfTrades.values, columns = column_names )
df1.head()
您的上一个错误很明显,您有22列,但您正在尝试传递21列的列名列表,不清楚您希望这样做:
dfTrades.set_index([dfTrades.index]);
那么是什么解决了您的问题?嗨,EdChum-感谢您的帮助。问题已修复,很抱歉回来晚。
column_names= ['TradeDate',
'TradeTime',
'CumPnL',
'DailyCumPnL',
'RealisedPnL',
'UnRealisedPnL',
'CCYCCY',
'CCYCCYPnLDaily',
'Position',
'CandleOpen',
'CandleHigh',
'CandleLow',
'CandleClose',
'CandleDir',
'CandleDirSwings',
'TradeAmount',
'Rate',
'PnL/Trade',
'Venue',
'OrderType',
'OrderID'
'Code']
df1 = pd.DataFrame(dfTrades.values, columns = column_names )
df1.head()