【问题标题】:How to read only certain rows and cells from csv with Python pandas?如何使用 Python pandas 从 csv 中仅读取某些行和单元格?
【发布时间】:2021-08-31 12:32:51
【问题描述】:

我有这种结构的 csv 文件:

Last Name   First Name  Start Date  End Date            
Example     Eva         1.1.2021    15.6.2021
                                        
Here is some random information.                                        
                                        
------- Header-------                       
Index   Date    Time        Reading
0   10.4.2021   16:26:01    0,1             
1   10.4.2021   16:25:44    0,1             
2   10.4.2021   16:00:00    0,1             
3   10.4.2021   16:00:00    0,1             
4   10.4.2021   14:00:00    0,1             
5   10.4.2021   14:00:00    0,1             
6   10.4.2021   13:00:00    0,3             

------- Header------- 
Index   Date    Time        Reading
0   10.4.2021   16:26:01    0,1             
1   10.4.2021   16:25:44    0,1             
2   10.4.2021   16:00:00    0,1             
3   10.4.2021   16:00:00    0,1             
4   10.4.2021   14:00:00    0,1             
5   10.4.2021   14:00:00    0,1             
6   10.4.2021   13:00:00    0,3

我想使用 pandas 读取文件并制作关于数据的字典,例如:{'last_name': 'Example', 'first_name': 'Eva'} 等等。例如,如何将某些值读入变量?目前,我读取 csv 文件是这样的:data = pd.read_csv(file, sep='delimiter')

【问题讨论】:

  • 那么,你不关心第一个空格之后的所有内容吗?

标签: python pandas csv


【解决方案1】:

标题

如果您只想将文件的开头作为字典读取,您可以这样做:

pd.read_csv('filename.csv', sep='\s\s+', nrows=1).loc[0].to_dict()

输出:

{'Last Name': 'Example',
 'First Name': 'Eva',
 'Start Date': '1.1.2021',
 'End Date': '15.6.2021'}

文件的其余部分

要读取文件的其余部分:

df = (pd.read_csv('filename.csv',
                  sep='\s+',
                  skiprows=6,
                  index_col=0,
                 )
        .drop(['Index', '-------']) # get rid of extra headers
     )

输出:

            Date      Time Reading
Index                             
0      10.4.2021  16:26:01     0,1
1      10.4.2021  16:25:44     0,1
2      10.4.2021  16:00:00     0,1
3      10.4.2021  16:00:00     0,1
4      10.4.2021  14:00:00     0,1
5      10.4.2021  14:00:00     0,1
6      10.4.2021  13:00:00     0,3
0      10.4.2021  16:26:01     0,1
1      10.4.2021  16:25:44     0,1
2      10.4.2021  16:00:00     0,1
3      10.4.2021  16:00:00     0,1
4      10.4.2021  14:00:00     0,1
5      10.4.2021  14:00:00     0,1
6      10.4.2021  13:00:00     0,3

如果您需要以编程方式确定要跳过的行数:

with open('filename.csv') as f:
    skip = 1
    for l in f:
        if l.startswith('-------'):
            break
        skip+=1

跳过:6

【讨论】:

  • 谢谢@mozway,这绝对是一个正确的方向。我的目标是从文件中得到一个干净的字典,只包含我需要的信息。假设我只想要这样的名称、日期和读数:{'last_name': 'Example', 'first_name': 'Eva', 'measurements': [{'date:': 'some_date', 'reading': 'some_reading'}, ...}。如何遍历列并只获取我需要的列?
  • 在没有确切格式的情况下很难回答;)由于这是一个不同的问题,我建议您先尝试一下,如果需要,再开始一个新问题。
猜你喜欢
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多