我有一个包含这些值的 CSV 文件(没有列):-
I:30n
J:0n
J:0n
U:1000n
C:0n
I:12n
I:10n
I:10n
I:10n
I:10n
我想为这些行值添加一个列名。
假设所有I(即:I:30n、I:12n 等)值记录应该在一列中,同样所有J(即 J:0n、J:0n)都应该在一列中,反之亦然。
任何人都可以帮忙吗?
我有一个包含这些值的 CSV 文件(没有列):-
I:30n
J:0n
J:0n
U:1000n
C:0n
I:12n
I:10n
I:10n
I:10n
I:10n
我想为这些行值添加一个列名。
假设所有I(即:I:30n、I:12n 等)值记录应该在一列中,同样所有J(即 J:0n、J:0n)都应该在一列中,反之亦然。
任何人都可以帮忙吗?
您可以为此使用 Pandas,您的文件格式不完全是逗号分隔值文件。但是您仍然可以使用 pandas read_csv()方法。假设你的文件名是test_file
import pandas as pd
df = pd.read_csv('test_file', sep=':', header=None)
>>> df
0 1
0 I 30n
1 J 0n
2 J 0n
3 U 1000n
4 C 0n
5 I 12n
6 I 10n
7 I 10n
8 I 10n
9 I 10n
然后你可以使用pivot()函数:
>>> df.pivot(columns=0)
\ 1
0 C I J U
0 NaN 30n NaN NaN
1 NaN NaN 0n NaN
2 NaN NaN 0n NaN
3 NaN NaN NaN 1000n
4 0n NaN NaN NaN
5 NaN 12n NaN NaN
6 NaN 10n NaN NaN
7 NaN 10n NaN NaN
8 NaN 10n NaN NaN
9 NaN 10n NaN NaN
如果您打算将其写回文件,则可以使用to_csv()方法。
# this row eliminates the level headers of the columns at level 0
>>> df.columns=df.columns.get_level_values(1)
>>> df
0 C I J U
0 30n
1 0n
2 0n
3 1000n
4 0n
5 12n
6 10n
7 10n
8 10n
9 10n
>>> df.to_csv('new_test_file', index=False)
或者
如果你想让它变得不那么稀疏,你可以先把它变成一个dict,然后再回到DataFrame:
>>> _dict = df.groupby(0)[1].apply(list).to_dict()
>>> _dict
{'C': ['0n'], 'I': ['30n', '12n', '10n', '10n', '10n', '10n'], 'J': ['0n', '0n'], 'U': ['1000n']}
>>> pd.DataFrame.from_dict(_dict, orient='index')
0 1 2 3 4 5
C 0n None None None None None
I 30n 12n 10n 10n 10n 10n
J 0n 0n None None None None
U 1000n None None None None None
>>> pd.DataFrame.from_dict(_dict, orient='index').T
C I J U
0 0n 30n 0n 1000n
1 None 12n 0n None
2 None 10n None None
3 None 10n None None
4 None 10n None None
5 None 10n None None