打开一个20GB的文件,用于分析熊猫

时间:2018-02-12 14:08:02

标签: python pandas bigdata anaconda data-science

我是数据科学和数据分析的新手,我希望我的问题不是太天真。我目前正在尝试使用pandas和python打开一个文件用于机器学习目的,我将它们全部放在DataFrame中是理想的。现在该文件是18GB大,我的RAM是32 GB,但我不断收到内存错误。

  1. 根据您的经验可能吗?
  2. 如果不是,你知道知道更好的解决方法吗? (hive表?将我的RAM大小增加到64?创建数据库并从python访问它) 欢迎提出每一个意见!
  3. 提前致谢。

2 个答案:

答案 0 :(得分:0)

您应该每次尝试读取并处理一个预定义的数据块 通过使用chunksize解释here

<form>
<table class="table-fixed">
<thead>
  <tr>
    <th *ngIf="selectionMode == 'multi'" class="checkbox">
      <mat-checkbox (change)="onChangeSelectionAll($event)">
      </mat-checkbox>
    </th>
    <th *ngFor="let column of columns" class="pointer" (click)="sort(column)">{{column.label}}
    </th>
  </tr>
</thead>
<tbody>
  <tr *ngFor="let node of data">
    <td>
      <mat-checkbox [checked]="node.isSelected" name="node.id" (change)="onChangeSelection($event, node)" [ngClass]="node.isFiltered ? 'filtered' : ''">
      </mat-checkbox>

    </td>
    <td *ngIf="showIcon" class="icon" (click)="onClicked($event, node)">
      <i class="icon-{{node.data.iconname ? node.data.iconname.toLowerCase().replace('.png', '') : ''}}" height="24"></i>
    </td>
    <td *ngIf="showStatus" class="icon">
      <i *ngIf="node.tooltip !== '<ul></ul>'" tooltip-delay="300" tooltip='{{ node.tooltip }}' tooltip-position="right" class="material-icons {{node.icon_class}}"
        height="24">{{node.icon}}</i>
      <i *ngIf="node.tooltip === '<ul></ul>'" class="material-icons {{node.icon_class}}" height="24">{{node.icon}}</i>
    </td>
    <td *ngFor="let column of columns" class="{{(node.normalizedError && node.normalizedError[column.id]) ? 'error' : 'normal'}}"
      tooltip="{{(node.normalizedError && node.normalizedError[column.id]) ? node.normalizedError[column.id] : false}}"
      tooltip-delay="300" tooltip-position="below" tooltipDisabled="{{(node.normalizedError && node.normalizedError[column.id]) ? false : true}}"
      (click)="onClicked($event, node)" [innerHTML]="node.normalizedData[column.name.toLowerCase()] ? node.normalizedData[column.name.toLowerCase()] : ''"></td>
  </tr>
</tbody>
<!--</div>-->
</table>
</form>

答案 1 :(得分:0)

您可以使用块中的数据吗?如果是这样,您可以使用pandas的迭代器接口来浏览文件。

df_iterator = pd.read_csv('test.csv', index_col=0, iterator=True, chunksize=5)
for df in df_iterator:
    print(df)
    # do something meaningful
    print('finished iteration on {} rows'.format(df.shape[0]))
    print()