Python 将CSV中的大纲格式转换为两列
我有以下格式的CSV文件中的数据(数据框中的一列)。这本质上类似于Word文档中的大纲,我在这里显示的标题是字母,是主标题,而作为数字的项目是副标题:Python 将CSV中的大纲格式转换为两列,python,pandas,Python,Pandas,我有以下格式的CSV文件中的数据(数据框中的一列)。这本质上类似于Word文档中的大纲,我在这里显示的标题是字母,是主标题,而作为数字的项目是副标题: A 一, 二, 三, B 一, 二, C 一, 二, 三, 四, 我想将其转换为以下格式(数据帧中的两列): A 1 A 2 A 3 B 1 B 2 C1 C2 C3 C4 我正在使用pandasread\u csv将数据转换为dataframe,并尝试通过for循环重新格式化,但由于数据重复并被覆盖,我遇到了困难。例如,a3将被c3覆盖
- A
- 一,
- 二,
- 三,
- B
- 一,
- 二,
- C
- 一,
- 二,
- 三,
- 四,
- A 1
- A 2
- A 3
- B 1
- B 2
- C1
- C2
- C3
- C4
pandas
read\u csv
将数据转换为dataframe
,并尝试通过for循环重新格式化,但由于数据重复并被覆盖,我遇到了困难。例如,a3
将被c3
覆盖(当只需要一个实例时,会导致两个c3
实例,并且在循环中丢失a3
)。最好的方法是什么
对格式错误表示歉意,本网站新手。使用:
#if no csv header use names parameter
df = pd.read_csv(file, names=['col'])
df.insert(0, 'a', df['col'].mask(df['col'].str.isnumeric()).ffill())
df = df[df['a'] != df['col']]
print (df)
a col
1 A 1
2 A 2
3 A 3
5 B 1
6 B 2
8 C 1
9 C 2
10 C 3
11 C 4
详细信息:
检查值:
将True
替换为NaN
s,并向前填充缺少的值:
print (df['col'].mask(df['col'].str.isnumeric()).ffill())
0 A
1 A
2 A
3 A
4 B
5 B
6 B
7 C
8 C
9 C
10 C
11 C
Name: col, dtype: object
通过以下方式将新列添加到第一个位置:
最后通过删除具有相同值的行
print (df['col'].mask(df['col'].str.isnumeric()).ffill())
0 A
1 A
2 A
3 A
4 B
5 B
6 B
7 C
8 C
9 C
10 C
11 C
Name: col, dtype: object
df.insert(0, 'a', df['col'].mask(df['col'].str.isnumeric()).ffill())
print (df)
a col
0 A A
1 A 1
2 A 2
3 A 3
4 B B
5 B 1
6 B 2
7 C C
8 C 1
9 C 2
10 C 3
11 C 4