Python 每当列中出现逗号时创建新行

Python 每当列中出现逗号时创建新行,python,pandas,numpy,Python,Pandas,Numpy,我正在尝试创建一个迷你程序,计算离我最近的开放式餐厅。我有一个数据集,其中包括餐厅名称、位置、星级和营业时间。然而,有一个问题:有时一家餐厅一天会有多个开放/关闭时间 例如: Name, location, type, and hours Blue Duck Tavern, 1201 24th St NW, American Restaurant, 6:30-10:30AM, 11:30AM-2PM,5:30-10:30PM 我试图将数据输入CSV,但对于有多个小时的餐厅(如示例中所示),它

我正在尝试创建一个迷你程序,计算离我最近的开放式餐厅。我有一个数据集,其中包括餐厅名称、位置、星级和营业时间。然而,有一个问题:有时一家餐厅一天会有多个开放/关闭时间

例如:

Name, location, type, and hours

Blue Duck Tavern, 1201 24th St NW, American Restaurant, 6:30-10:30AM, 11:30AM-2PM,5:30-10:30PM
我试图将数据输入CSV,但对于有多个小时的餐厅(如示例中所示),它无法正确解析数据

最简单的解决方案是(我认为)用同样的信息创建另一行,但下一个小时。因此,示例将如下所示:

Blue Duck Tavern, 1201 24th St NW, American Restaurant, 6:30-10:30AM

Blue Duck Tavern, 1201 24th St NW, American Restaurant, 11:30AM-2PM

Blue Duck Tavern, 1201 24th St NW, American Restaurant, 5:30-10:30PM
所以如果餐厅不开门,节目就不会播放

所以我有三个一般性问题。 1) 有没有比我上面提到的解决方案更好的方法(为多个开放/关闭小时的每次迭代创建一个新行) 2) 下面,我在以下实现中遇到问题:

import pandas as pd
import numpy as np

data = pd.import_csv(data.csv)
for row in data: 
    if data['hours'].str.contains(',') == 'True':
        count = data['hours'].str.count(',')
        data.append.. 
        <create new row with Name[row], location[row], type[row], and hours[row] for the # of count>
这将导致:ValueError:没有为对象类型命名轴

我有点不清楚接下来的步骤,或者我做错了什么,因为如果我这么做:

print data[data['Monday'].astype(str).str.contains(',')]
它工作并返回结果。但是我不能做任何有条件的事情,除非它抛出一个错误

3) 如果一行中有多个逗号,我也有点困惑该怎么办。。我有一个模糊的想法,但如果你有任何提示,我很想听听:)


谢谢你的阅读

如果我理解正确,可以使用正则表达式作为分隔符加载数据,确保逗号前面不是
AM
PM
(使用a)。然后,在将所有不想修改的列设置为索引后,可以使用
str.split
stack
。例如:

data = pd.read_csv('data.csv', sep='(?<!AM|PM),')
# Get rid of spaces in your column names
data.columns = data.columns.str.strip(' ')

>>> data
               Name          location                  type   hours
0  Blue Duck Tavern   1201 24th St NW   American Restaurant   6:30-10:30AM, 11:30AM-2PM,5:30-10:30PM 


new_data = (data.set_index(['Name', 'location', 'type'])
          .hours.str.split(',', expand=True)
          .stack()
          .reset_index(level=['Name', 'location', 'type']))

>>> new_data
               Name          location                  type              0
0  Blue Duck Tavern   1201 24th St NW   American Restaurant   6:30-10:30AM
1  Blue Duck Tavern   1201 24th St NW   American Restaurant    11:30AM-2PM
2  Blue Duck Tavern   1201 24th St NW   American Restaurant   5:30-10:30PM

data=pd.read\u csv('data.csv',sep=')(?尝试将多个小时与下面提到的“\u”或任何其他分隔符组合,并将其作为一个整体

上午6:30-10:30\u上午11:30-下午2点\u下午5:30-10:30


Blue Duck Tavern,1201西北大街24号,美国餐厅,上午6:30-10:30AM\u 11:30AM-2PM\u 5:30-10:30PM

数据已经存在于数据框中?或者json对象中?是的!它已经存在于称为数据的数据框中(来自csv)
data = pd.read_csv('data.csv', sep='(?<!AM|PM),')
# Get rid of spaces in your column names
data.columns = data.columns.str.strip(' ')

>>> data
               Name          location                  type   hours
0  Blue Duck Tavern   1201 24th St NW   American Restaurant   6:30-10:30AM, 11:30AM-2PM,5:30-10:30PM 


new_data = (data.set_index(['Name', 'location', 'type'])
          .hours.str.split(',', expand=True)
          .stack()
          .reset_index(level=['Name', 'location', 'type']))

>>> new_data
               Name          location                  type              0
0  Blue Duck Tavern   1201 24th St NW   American Restaurant   6:30-10:30AM
1  Blue Duck Tavern   1201 24th St NW   American Restaurant    11:30AM-2PM
2  Blue Duck Tavern   1201 24th St NW   American Restaurant   5:30-10:30PM