我遇到这种情况,有时当我从csv
读取df
时,我会得到一个名为unnamed:0
的不需要的索引列。这很烦人!我试过了
merge.to_csv('xy.df', mode = 'w', inplace=False)
我认为这是一个解决方案,但我仍然得到unnamed:0
列!有没有人对此有所了解?
答案 0 :(得分:117)
这是索引列,传递index=False
不写出来,请参阅docs
示例:
In [37]:
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc'))
pd.read_csv(io.StringIO(df.to_csv()))
Out[37]:
Unnamed: 0 a b c
0 0 0.109066 -1.112704 -0.545209
1 1 0.447114 1.525341 0.317252
2 2 0.507495 0.137863 0.886283
3 3 1.452867 1.888363 1.168101
4 4 0.901371 -0.704805 0.088335
与之比较:
In [38]:
pd.read_csv(io.StringIO(df.to_csv(index=False)))
Out[38]:
a b c
0 0.109066 -1.112704 -0.545209
1 0.447114 1.525341 0.317252
2 0.507495 0.137863 0.886283
3 1.452867 1.888363 1.168101
4 0.901371 -0.704805 0.088335
您还可以选择通过传递read_csv
告诉index_col=0
第一列是索引列:
In [40]:
pd.read_csv(io.StringIO(df.to_csv()), index_col=0)
Out[40]:
a b c
0 0.109066 -1.112704 -0.545209
1 0.447114 1.525341 0.317252
2 0.507495 0.137863 0.886283
3 1.452867 1.888363 1.168101
4 0.901371 -0.704805 0.088335
答案 1 :(得分:6)
另一种可能发生的情况是,如果您的数据被不正确地写入csv
,以使每行以逗号结尾。当您尝试将数据读入Unnamed: x
时,这将在数据末尾留下一个未命名的列df
。
答案 2 :(得分:3)
如果保存为CSV时无法删除索引(即CSV文件来自上游),则另一个选择是将index_col=[0]
与pd.read_csv
一起使用。 IOW,在阅读时处理,而不是在写作时处理。
df = pd.DataFrame('x', index=range(5), columns=list('abc'))
df
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
# Save DataFrame to CSV.
df.to_csv('file.csv')
pd.read_csv('file.csv')
Unnamed: 0 a b c
0 0 x x x
1 1 x x x
2 2 x x x
3 3 x x x
4 4 x x x
# Now try this again, with the extra argument.
pd.read_csv('file.csv', index_col=[0])
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
或者,您可以使用str.match
进行过滤:
df
Unnamed: 0 a b c
0 0 x x x
1 1 x x x
2 2 x x x
3 3 x x x
4 4 x x x
df.columns
# Index(['Unnamed: 0', 'a', 'b', 'c'], dtype='object')
df.columns.str.match('Unnamed')
# array([ True, False, False, False])
df.loc[:, ~df.columns.str.match('Unnamed')]
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
答案 3 :(得分:3)
使用del df['column_name']
答案 4 :(得分:2)
要使用所有未命名列,您还可以使用正则表达式,例如df.drop(df.filter(regex="Unname"),axis=1, inplace=True)
答案 5 :(得分:1)
您可以对未命名的列执行以下操作:
file.csv
$callChargesSql = "SELECT
customer,
source,
source_name,
calltype,
SUM(case when inclusive = '1' then customer_cost else 0 end) as customer_total,
SUM(cost) as cost,
SUM(recording_cost) as recording_cost,
SUM(recording_customer) as recording_customer
FROM
billing_calldata
WHERE
(
customer = '".db_string($result["sequence"])."' OR
customer IN
(
SELECT
sequence
FROM
customer
WHERE
resellerid = '".db_string($result["sequence"])."'
)
) AND
(
(
MONTH(timestamp) = '".db_string($calls["month"])."' AND
YEAR(timestamp) = '".db_string($calls["year"])."'
) OR
status = 'y'
)
GROUP BY customer, source, calltype
ORDER BY customer, timestamp ASC;";
#read文件
,A,B,C
0,1,2,3
1,4,5,6
2,7,8,9
方法1:删除未命名的列
df = pd.read_csv('file.csv')
方法2:重命名未命名的列
# delete one by one like column is 'Unnamed: 0' so use it's name
df.drop('Unnamed: 0', axis=1, inplace=True)
#delete all Unnamed Columns in a single code of line using regex
df.drop(df.filter(regex="Unnamed"),axis=1, inplace=True)
如果要像输入文件中那样用空白标题写出来,只需在上方选择“名称”作为“。
答案 6 :(得分:1)
简单地做到这一点:
df = df.loc[:, ~df.columns.str.contains('^Unnamed')]
答案 7 :(得分:1)
或者:
df = df.drop(columns=['Unnamed: 0'])